Как стать автором
Поиск
Написать публикацию
Обновить

Предпочитайте SRW-блокировки критическим секциям

Время на прочтение6 мин
Количество просмотров4.8K
Всего голосов 11: ↑10 и ↓1+9
Комментарии5

Комментарии 5

Вопрос к знающим: есть ли смысл помещать вообще что-то на одной кэш-линии с объектом синхронизации? В том смысле — нет в этом объекте каких-то volatile'ных полей, которые будут приводить к постоянной инвалидации линии?
Если остальное что-то тоже пишется из нескольких потоков оно должно быть volatile, если нет, то не совсем понятно, как они рядом оказались.

Об этом и вопрос. Объект синхронизации (или атомарная переменная) по сути "отравляют" кэш-линию. Если только положить несколько таких объектов синхронизации рядом в структуре?

Очевидно же что зависит от задачи: если это что-то гарантированно меняется вместе с объектом синхронизации (например это структура данных), то лучше менять одну кеш-линию вместо нескольких (т.е. разместить их в одной кеш-линии), если это два, никак не связанных (логически), объекта, то их лучше поместить в разные кеш-линии, чтобы избежать ненужных коллизий.
SRW, как я понимаю, альтернативное название для Single Write Multiple Read блокировки?
Реентерабельные блокировки удобны, особенно в случае, когда нам необходимо последовательно комбинировать 2 разных участка кода, каждый из которых требует блокировки какой-то структуры. В противном случае придется делить код на «чистый» и «грязный», который предполагает по умолчанию, что блокировка уже взята, а это приведет к тому, что однажды данное условие будет забыто.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий