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

Y>Если при доступе к переменной я окружаю код вызовами pthread_mutex_lock()/pthread_mutex_unlock(), то нужно ли при ее объявлении использовать квалификатор volatile?


Эти средства относятся к разным областям и никак не связаны.

Y>Где-то слышал, что компиляторы гарантируют, что после вызова функции в регистрах не окажется закэшированного значения переменной, но не уверен, так ли это.


Компиляторы гарантируют, что последствия операций будут такими же, как если бы операции выполнились в том порядке, в каком они присутствуют в коде. Если это не так — значит, баг в компиляторе.

Y>Вообще, судя по http://alenacpp.blogspot.com/2006/04/volatile.html#comment-1976129473176086084 volatile все-таки стоит ставить.


Вне остального контекста как-то не совсем понятно. Вполне возможно, что вынос присвоения в том контексте никак не влияет на логику, например, если компилятор знает, что присвоение на данной архитектуре будет атомарно, или других обращений к переменной нет.

Y>В таком случае встречный вопрос — а как быть с GTK в многопоточных приложениях? В отдельном потоке я могу создать виджеты с volatile, вызвать gdk_threads_enter()/gdk_threads_leave(), но GTK-то ничего знать о них не будет...


volatile для переменной — это, грубо говоря, прибивание операций с переменной гвоздями. Будет имееть определенный эффект при синхронизации, но все же синхронизацию принято осуществлять другими методами.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.