На многоядерной машине x86, скажем, поток, выполняющийся на ядре 1, увеличивает целочисленную переменную a
в то же время, когда поток на ядре 2 также увеличивает ее. Учитывая, что начальное значение a
было 0, всегда ли оно будет 2
в конце? Или это может иметь какое-то другое значение? Предположим, что a
объявлено как volatile
, и мы не используем атомарные переменные (такие как atomic‹> C++ и встроенные атомарные операции в gcc).
Если значение a
действительно всегда будет равно 2 в таком случае, означает ли это, что long int
в x86-64 также будет иметь то же свойство, то есть a
всегда будет 2 в конце?
volatile
не дает вам атомарного доступа. - person Cat Plus Plus   schedule 08.05.2012