atomic <int>для старых компиляторов c ++ - PullRequest
3 голосов
/ 08 сентября 2011

Я использую atomic<int> в своем коде, но машина, на которой я сейчас компилирую, имеет более старую версию g ++, которая не поддерживает C ++ 11.Есть ли в сети эквивалентный класс, чтобы я мог использовать его в своем коде, или, если нет, где я могу найти реализацию C ++ 11 atomic<int>, чтобы я мог скопировать его оттуда.Это легко сделать?

Ответы [ 3 ]

5 голосов
/ 08 сентября 2011

Предлагаемая (то есть неофициальная) Boost.Atomic библиотека предназначена именно для этого.Я не знаю, в каком состоянии он находится в данный момент, но он используется в реализации недавно принятой ( официально ) принятой библиотеки Boost.Lockfree , поэтому, предположительно, ее можно использовать.1008 *

EDIT - обновлены ссылки, теперь, когда Atomic и Lockfree официально были в Boost в течение некоторого времени:
Boost..Lockfree

2 голосов
/ 08 сентября 2011

Библиотека атомных операций Ханса Бома хороша, хотя трудно определить, что доступно на различных платформах.

Если вы согласны с LGPL, Intel TBB имеет то, что вы ищете (плюс много других вещей).

Если вы только смотрите на GCC, то вам, возможно, удастся сойти с рук толькоиспользуя встроенные функции GCC (я не уверен, в какой версии GCC они были обнаружены, но они существуют уже некоторое время).

2 голосов
/ 08 сентября 2011

sig_atomic_t

Это неотъемлемый тип объекта, к которому можно обращаться как к элементарному объекту, даже при наличии асинхронных сигналов.

в gcc равно atomic

Чтобы избежать неопределенности при прерывании доступа к переменной, вы можете использовать определенный тип данных, доступ к которому всегда атомарный: sig_atomic_t.

...