Является ли ++ atomic для std :: atomic <int> - PullRequest
9 голосов
/ 27 июля 2011

В соответствии с одним каналом 9 видео E2E (с Хербом Саттером в нем) в c ++ 0x, если число atomic<int> number++ является атомным. Может кто-нибудь подтвердить, что так оно и есть в окончательном стандарте C ++ 11 (давайте представим, что он завершен:)).

Ответы [ 2 ]

14 голосов
/ 27 июля 2011

Стандарт завершен , и каждая операция по всем стандартным интегральным специализациям atomic<T> является атомарной.

Это не означает, что все выражения со стандартным интегралом atomic<T> являются атомарными.

number = number * 2;

- это две операции:

temporary = number * 2;
number = temporary;

Каждый из них атомный, но вместе они не являются. Для этого предназначены транзакции / критические разделы.

7 голосов
/ 27 июля 2011

Да.atomic<int> operator++ использует atomic<int>::fetch_add, что является атомарной операцией.

http://www.open -std.org / jtc1 / sc22 / wg21 / docs / paper / 2011 / n3242.pdf p.1127

...