Каков самый простой способ получить функциональность, которую предоставляют функции Заблокирован в Win32 в приложении C++ для Linux? В частности, легкий способ атомарного увеличения или добавления 32- или 64-битных целых чисел?





При дальнейшем рассмотрении это выглядит многообещающим. Ура, переполнение стека.
Открытый исходный код Intel ThreadBuildingБлоки имеет шаблон Atomic, который предлагает те же функции, что и класс Interlocked в .NET.
В отличие от встроенных модулей Atomic от gcc, он кроссплатформенный и не зависит от конкретного компилятора. Как правильно указывает Неманья Трифунович выше, это действительно зависит от инструкции процессора сравнивать и менять местами, предоставляемой чипами x86 и Itanium. Думаю, вы и не ожидали бы от библиотеки Intel ничего другого :)
Строго говоря, Linux не может предлагать атомарные «взаимосвязанные» функции, подобные функциям Win32, просто потому, что эти функции требуют аппаратной поддержки, а Linux работает на некоторых платформах, которые не предлагают такую поддержку. Сказав это, если вы можете ограничиться Intel x86 / x64, взгляните на реализацию подсчета ссылок в библиотеке общих указателей Boost.
Всего несколько примечаний, чтобы прояснить проблему, которая не имеет ничего общего с Linux.
Операции RWM (чтение-изменение-запись) и те, которые не выполняются в одноэтапном режиме, нуждаются в аппаратной поддержке для выполнения атомарно; среди них увеличения и уменьшения, fetch_and_add и т. д.
Для некоторых архитектур (включая I386, AMD_64 и IA64) gcc имеет встроенную поддержку атомарного доступа к памяти, поэтому внешние библиотеки не требуются. Здесь вы можете прочитать некоторую информацию об API.
Функции атомный из Apache Portable Runtime действительно близки к функциям Win32 InterlockedXXX.
Вы можете вставить некоторый ассемблерный код в свой исходный код, чтобы напрямую использовать инструкции x68 с блокировкой.
Вы должны использовать операцию блокировка xadd.
См., Например, это.
Достаточно распространенная библиотека glib, которая используется в программировании GTK и QT, а также автономная, предлагает множество атомарных операций. См. Список в http://library.gnome.org/devel/glib/2.16/glib-Atomic-Operations.html. Есть функции g_atomic для большинства операций, которые Interlocked поддерживает в Win32, а на платформах, где оборудование напрямую поддерживает их, они встроены как необходимый ассемблерный код.
Пожалуйста, не пишите только ответы по ссылкам. Ключевая информация должна содержаться в ответе. Обязательно дополните это ссылкой.