Да, если вы не можете гарантировать, что изменения базовой переменной counter
являются атомарными, вам нужен мьютекс.
Классический пример, скажем, counter
- это двухбайтовое значение, которое увеличивается на (не-атомные) этапы:
add 1 to lower byte
if lower byte is 0:
add 1 to upper byte
и начальное значение 255.
Если между каким-либо изменением нижнего байта и изменением верхнего байта появится другой поток, он будет читать 0 вместоправильные 255 (перед приращением) или 256 (после приращения).
С точки зрения того, какие типы данных являются атомарными, последний стандарт C ++ определяет их в заголовке <atomic>
.
Если у вас нет возможностей C ++ 11, то все зависит от реализации, какие типы являются атомарными.