Почему люди используют атоми c обмен вместо магазина? - PullRequest
1 голос
/ 23 апреля 2020

То есть C ++

atomic_int turn(0)

turn.exchange(1);
turn.store(1);

эти два кода работают одинаково, верно? Но я проверил много примеров использования блокировки 1-го.

Почему?

1 Ответ

0 голосов
/ 23 апреля 2020

Оба оператора сохраняют значение в переменную atomi c. Вызов exchange возвращает ранее сохраненное значение, которое в этом случае отбрасывается. Однако это не означает, что два вызова абсолютно одинаковы. Операция exchange - это операция чтения-изменения-записи, а операция store - только запись. Это означает, что если у нас есть:

// thread 1
turn.store(0);  // A

// thread 2
turn.exchange(1);  // B

и если поток 2 считывает значение, сохраненное потоком 1, то строка A синхронизируется со строкой B. Если поток 2 будет использовать store вместо exchange , не было бы такой синхронизации.

...