Re[7]: volatile - нужен ли при pthread_mutex_lock() и в GTK?
От: ДимДимыч Украина http://klug.org.ua
Дата: 11.09.09 22:59
Оценка:
Здравствуйте, netch80, Вы писали:

N>1. Не видел ни одной системы, где бы эти функции сбрасывали кэш. Что за безумная идея? Откуда Вы вообще её взяли? Кэш памяти в процессоре — штука достаточно умная, чтобы не требовать общего сброса (безумно дорогого, кстати) на малейший чих.


Про общий сброс всех кэшей на малейший чих я не говорил. А проблема false sharing на SMP присутствует (если у каждого ядра есть как минимум один свой кэш), но к данной дискуссии, оказывается, отношения не имеет

N>2. А при чём тут вообще кэширование памяти в процессоре?


Вот и я думаю — при чем здесь кэширование в процессоре?

N>Весь тред посвящён кэшированию значения переменной компилятором в другом месте (как правило, в регистре). Например, в коде вида


N>
N>  int a, b, c;
N>  b = a;
N>  unlock(m);
N>  lock(m);
N>  c = a;
N>


N>компилятор может закэшировать a в регистре между её чтениями, или заменить второе присвоение на c=b, или сделать любое другое действие подобного типа. И без volatile ему никто это не запретит.


Для ядра пишут вот что: http://kernel.org/doc/Documentation/volatile-considered-harmful.txt. Уверен, что в userspace ситуация не сильно отличается. Если же все-таки существуют какие-нибудь более-менее официальные рекомендации по использованию volatile для защиты данных в мультинитевых приложениях, а не только домыслы анонимных комментаторов, буду благодарен за ссылки.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.