Взаимно блокируемый эквивалент на Linux

12
задан twk 29 September 2008 в 17:14
поделиться

7 ответов

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

-1
ответ дан 2 December 2019 в 05:29
поделиться

ThreadBuildingBlocks Intel с открытым исходным кодом имеет шаблон, Атомарный, который предлагает ту же функциональность как Взаимно блокируемый класс.NET.

В отличие от gcc's, Атомарного созданный-ins, это является кросс-платформенным и не зависит от конкретного компилятора. Как Nemanja Trifunovic правильно указывает выше, это действительно зависит от инструкции ЦП сравнивать-и-подкачивать, предоставленной микросхемами Itanium и x86. Я предполагаю, что Вы не ожидали бы ничто больше от библиотеки Intel:)

8
ответ дан 2 December 2019 в 05:29
поделиться

Только немного примечаний для разъяснения проблемы, которая не имеет никакого отношения к Linux.

RWM (read-modify-write) операции и те, которые не выполняют в одноэтапной потребности поддержку оборудования для выполнения атомарно; среди них инкременты и декременты, fetch_and_add, и т.д.

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

8
ответ дан 2 December 2019 в 05:29
поделиться

Атомарные функции от Apache Портативное Время выполнения действительно близко к функциям Win32 InterlockedXXX.

3
ответ дан 2 December 2019 в 05:29
поделиться

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

6
ответ дан 2 December 2019 в 05:29
поделиться

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

Необходимо использовать блокировку xadd операция.

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

2
ответ дан 2 December 2019 в 05:29
поделиться

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

2
ответ дан 2 December 2019 в 05:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: