Вопрос

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

Это было полезно?

Решение 7

После дальнейшего рассмотрения, это выглядит многообещающе.Ура переполнению стека.

Другие советы

Открытый исходный код Intel Блоки для создания потоков имеет шаблон Atomic, который предлагает ту же функциональность, что и взаимосвязанный класс .NET.

В отличие от встроенных модулей Atomic gcc, он кроссплатформенный и не зависит от конкретного компилятора.Как правильно указал выше Неманья Трифунович, это действительно зависит от сравнение и обмен Инструкции для процессора предоставляются чипами x86 и Itanium.Я думаю, вы не ожидали бы ничего другого от библиотеки Intel :)

Всего несколько замечаний, чтобы прояснить проблему, которая не имеет ничего общего с Linux.

РВМ операции (чтение-изменение-запись) и те, которые не выполняются за один шаг, нуждаются в аппаратной поддержке для выполнения атомарно;среди них инкременты и декременты, fetch_and_add и т.д.

Для некоторых архитектур (включая I386, AMD_64 и IA64) gcc имеет встроенную поддержку атомарного доступа к памяти, поэтому внешний libray не требуется. Здесь вы можете прочитать некоторую информацию об API.

Строго говоря, Linux не может предлагать атомарные "взаимосвязанные" функции, подобные функциям в Win32, просто потому, что эти функции требуют аппаратной поддержки, а Linux работает на некоторых платформах, которые такой поддержки не предлагают.Сказав это, если вы можете ограничиться Intel x86 / x64, взгляните на реализацию подсчета ссылок в библиотеке Boost shared pointers.

Тот Самый атомный функции из Apache Portable Runtime действительно близки к функциям Win32 InterlockedXXX.

Вы можете вставить некоторый ассемблерный код в свой исходный код, чтобы напрямую использовать инструкции с блокировкой x68.

Вы должны использовать заблокировать xadd операция.

Смотрите, например это.

Довольно распространенная библиотека glib, которая используется в программировании на GTK и QT, а также в standalone, предлагает множество атомарных операций.Видишь http://library.gnome.org/devel/glib/2.16/glib-Atomic-Operations.html для составления списка.Есть такие g_atomic функции для большинства операций, которые Interlocked поддерживает в Win32, и на платформах, где аппаратное обеспечение напрямую поддерживает их, они встроены как необходимый ассемблерный код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top