2009-02-07 2 views

ответ

14

Вы можете найти дискуссии по поводу реализации этого признака в импульс там: http://lists.boost.org/Archives/boost/2008/11/144803.php

> Можно ли N2427 - C++ Атомные типы и операции будут реализованы

> без помощи компилятора?

No.

Они не должны быть встроенными функциями, если вы можете написать встроенный ассемблер (или отдельно скомпилированный ассемблер для , что материя), то вы можете написать сами по операции непосредственно. Вы могут даже использовать простой C++ (например, простое назначение для загрузки или для хранения). Причина, по которой вам нужна поддержка компилятора , предотвращает неуместную оптимизацию: атомные операции не могут быть оптимизированы, и обычно не следует переупорядочивать до или после любых других операций. Это означает, что даже неатомные магазины , выполненные до хранения атомарного магазина , должны быть заполнены и не могут быть кэшированы в регистре (например). Кроме того, нагрузки, возникающие после атомной операции , не могут быть подняты перед атомным оператором. На некоторых компиляторах достаточно использовать встроенный ассемблер . В других случаях достаточно вызвать внешнюю функцию . MSVC предоставляет _ReadWriteBarrier() для обеспечения порядка компилятора. Другие компиляторы нужны другие флаги.

Смежные вопросы