Связанный эквивалент в Linux

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
0
12 570
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

Пожалуйста, не пишите только ответы по ссылкам. Ключевая информация должна содержаться в ответе. Обязательно дополните это ссылкой.

David Heffernan 24.04.2017 18:24

Открытый исходный код 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, а на платформах, где оборудование напрямую поддерживает их, они встроены как необходимый ассемблерный код.

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