После дальнейшего рассмотрения это выглядит многообещающим. Переполнение стека Yay.
ThreadBuildingBlocks Intel с открытым исходным кодом имеет шаблон, Атомарный, который предлагает ту же функциональность как Взаимно блокируемый класс.NET.
В отличие от gcc's, Атомарного созданный-ins, это является кросс-платформенным и не зависит от конкретного компилятора. Как Nemanja Trifunovic правильно указывает выше, это действительно зависит от инструкции ЦП сравнивать-и-подкачивать, предоставленной микросхемами Itanium и x86. Я предполагаю, что Вы не ожидали бы ничто больше от библиотеки Intel:)
Только немного примечаний для разъяснения проблемы, которая не имеет никакого отношения к Linux.
RWM (read-modify-write) операции и те, которые не выполняют в одноэтапной потребности поддержку оборудования для выполнения атомарно; среди них инкременты и декременты, fetch_and_add, и т.д.
Для некоторой архитектуры (включая I386, AMD_64 и IA64) gcc имеет встроенную поддержку атомарного доступа к памяти, поэтому никакая внешняя библиотека не требуется. Здесь можно считать некоторую информацию о API.
Атомарные функции от Apache Портативное Время выполнения действительно близко к функциям Win32 InterlockedXXX.
Строго говоря Linux не может предложить атомарные "взаимно блокируемые" функции как в Win32, просто потому что эти функции требуют поддержки оборудования, и Linux работает на некоторых платформах, которые не предлагают той поддержки. Однако если можно ограничить себя к Intel x86/x64, смотреть на реализацию подсчета ссылок в совместно использованной библиотеке указателей Повышения.
Можно вставить некоторый ассемблерный код в источник, использовать x68 взаимно блокировало инструкции непосредственно.
Необходимо использовать блокировку xadd операция.
Посмотрите, например, это.
Довольно общая бойкая библиотека это используется в GTK и программировании QT, а также автономных предложениях множество атомарных операций. См. http://library.gnome.org/devel/glib/2.16/glib-Atomic-Operations.html для списка. Существуют g_atomic
функции для большинства операций, которые Взаимно блокировали поддержки на Win32, и на платформах, где аппаратные средства непосредственно поддерживают их, они встраиваются как необходимый ассемблерный код.