Реализация атомарного шаблона C ++ 0x - PullRequest
9 голосов
/ 07 февраля 2009

Я знаю, что подобный шаблон существует в TBB Intel, кроме того, что я не могу найти никакой реализации в Google или в библиотеке Boost.

1 Ответ

14 голосов
/ 07 февраля 2009

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

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

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

Нет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...