На многоядрена x86 машина, да кажем, че нишка, изпълнявана на core1, увеличава целочислена променлива a
в същото време нишката на core 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