LINUX.ORG.RU

volatile - нужен ли при pthread_mutex_lock()?


0

0

Собственно вопрос.

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

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

Просветите, пожалуйста.


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

Не нужно.

> что тогда произойдет, если pthread_mutex_lock() - inline-функция или макроопределение?

Тебе-то зачем волноваться об этом? Собираешься написать свои версии pthread_*?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

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

> Не нужно.


Забыл рассказать топикстартеру про барьеры :)

mv ★★★★★
()
Ответ на: комментарий от tailgunner

> Тебе-то зачем волноваться об этом? Собираешься написать свои версии pthread_*?
Ну а если я, к примеру, буду спать на epoll'е, пока другой поток будет менять переменную, и проснусь только тогда, когда он завершит свою работу - прочитаю ли я реальное значение, или значение из регистра?

> http://www.ddj.com/cpp/184403766
> - кури для своего случая.
Спасибо, почитаю.

> Забыл рассказать топикстартеру про барьеры :)
Ммм... А не подкинете толковую ссылочку? :)

riYu
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.