Являются ли + =, | =, & = etc атомарными? - PullRequest
32 голосов
/ 18 марта 2010

Являются ли операторы "модифицирования", такие как +=, |=, &= и т. Д. Атомарными?

Я знаю, ++ является атомарным (если вы выполните x++; в двух разных потоках "одновременно", вы всегда получите x, увеличенное на 2, в отличие от x=x+1 с отключенной оптимизацией.)

Что мне интересно, так это variable |= constant, а лайки поточно-ориентированы или я должен защищать их мьютексом?

(... или это зависит от процессора? В этом случае, как это на ARM?)

Ответы [ 12 ]

0 голосов
/ 18 марта 2010

Даже если ++ является атомарной операцией, это не означает, что два потока, выполняющие ++x, приведут к тому, что x будет ровно на два выше. Вам нужно как-то синхронизировать потоки, иначе они не обязательно увидят изменения друг друга.

0 голосов
/ 18 марта 2010

Стоит отметить, что эти операторы могут быть перегружены, поэтому не может быть никакой общей гарантии, что они являются атомарными для всех классов.

...