собственно не понятно почему
++a; - не атомарно
x = a; - атомарно
Знакомый вопрос))
Как уже обсуждалось в соседней теме AtomicData...
Цитирую ответ
brankovicЦитата: m_ax от Март 25, 2011, 03:47
У меня ещё такой вопрос возник:
Является ли следующая операция атомарна? (m_flag - это char):
Код
C++ (Qt)
while (m_flag++); // <<-- Атомарна ли оно?
critical_section();
m_flag = 0;
Из обычных операций атомарны только запись и чтение, и только того, что не больше size_t. Операция m_flag++ это по сути:
R = m_flag;
R = R + 1;
m_flag = R;
где R это регистр процессора. Между строкой 1 и 3 может вклиниться другой тред и всё испортить. Атомарные операции это специальные инструкции процессора (не портабильные), самая главная атомарная операция это atomic CAS, ещё можно почитать про load linked/store conditional.
Сейчас уже можно пользоваться шаблонным классом atomic в c++0x который обеспечивает атомарность, в частности, инкремента и декремента