Я создаю буфер, к которому будут обращаться некоторые потоки.Объявление 'volatile' типа данных, которое должно использоваться потоками
struct buffer {
struct items[32];
int numItems = 0; /*will keep track of number of items in the buffer
}; and will be updated by threads when accessed.
We'll include mutex locking*/
Должен ли я declate buffer
быть летучими или сделать numItems
летучий?
Что я думаю: я понимаю, что волатильность должна использоваться для предотвращения оптимизации компиляторами операций между атомарным доступом данных по потокам. Пожалуйста, исправьте меня, если я не понимаю этого
Спасибо!
Не пытайтесь использовать 'volatile' для обеспечения безопасности потоков. –
Не беспокойтесь об изменчивости; это бесполезно, если ваша цель - правильная многопоточная программа. Вместо этого вам понадобится более сильная juju (например, locks/mutexes/atomics). http://stackoverflow.com/questions/2484980/why-is-volatile-not-considered-useful-in-multithreaded-c-or-c-programming –
@JonathanLeffler. Проблема OPs - это не безопасность потоков, а некорректная оптимизация переменных, которые используются из внутренних потоков (функции обратного вызова). – Lundin