Зачем установить флаг Stop, используя `memory_order_seq_cst`, если вы проверяете его с помощью` memory_order_relaxed`?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Зачем установить флаг Stop, используя `memory_order_seq_cst`, если вы проверяете его с помощью` memory_order_relaxed`?

Сообщение Anonymous »

Herb Sutter, в своем разговоре «Atomic оружие», показывает несколько примеров использования атомики, и один из них сводится к следующему: (видео ссылка, временная метка) < /p>
  • Основной поток запускает несколько рабочих потоков. br />

    Код: Выделить всё

    while (!stop.load(std::memory_order_relaxed))
    {
    // Do stuff.
    }
    
  • Основной поток в конечном итоге выполняет stop = true; (примечание, с помощью порядка =), затем присоединяется к работникам.
Саттер объясняет, что проверяет флаг с помощью порядка = в порядке, потому что кто заботится, если поток останавливается с немного большей задержкой. Код>? Слайд говорит, что это целенаправленно не расслаблен , но не объясняет почему .
Похоже, он будет работать, возможно, с большей остановкой Задержка. < /p>
Это компромисс между производительностью и тем, как быстро другие потоки видят флаг? Т.е. Поскольку основной поток устанавливает флаг только один раз, мы могли бы также использовать самый сильный заказ, чтобы как можно быстрее донести сообщение?

Подробнее здесь: https://stackoverflow.com/questions/705 ... ith-memory
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»