2009-11-08 2 views
1

ОБНОВЛЕНО: Есть ли поточно-безопасный, незакрепленный и доступный на всех дистрибутивах Linux Приращение функция доступна на C или C++?Непрерывная функция блокировки без блокировки?

+1

Это будет частью C++ 0x, когда это выходит. – rlbond

+0

Вы говорите «без блокировки», а альтернативы, указанные ниже, блокируются. Но они не являются бесплатными; атомные операции требуют согласования всех ядер на процессоре, что включает в себя очистку кеша. Так что если вы найдете многопоточную программу, увеличивающую этот счетчик тысячи раз в секунду, атомные операции окажут заметное влияние на вашу производительность. –

+0

@Martin: «В этой вселенной нет ничего свободного», вот что я всегда говорю :-) Спасибо за комментарий: частота, с которой я буду использовать этот объект, очень низок. – jldupont

ответ

7

У GLib есть функции для этого. Вы можете проверить http://library.gnome.org/devel/glib/stable/glib-Atomic-Operations.html

В частности, это звучит, как вы хотите g_atomic_int_inc()

+0

Должен ли я включать GLib в зависимость от моего проекта? Или это просто .lib? – jldupont

+1

Да, вам нужно будет ссылаться на glib, но это не должно быть проблемой, поскольку он доступен по умолчанию для каждого дистрибутива Linux (?) Linux. – jstedfast

+1

Он доступен только для систем с установленной GNOME. – HalfBrian

4

Нынешние стандарты C и C++ не определяют такую ​​вещь. У вашей реализации может быть и одно.

6

Я думаю, что это расширения GNU и конкретные процессоры, но посмотрите на GNU C Atomic Builtins.

Я думаю, что существуют также атомные «библиотеки», которые используют встроенную сборку и т. Д. Для обеспечения таких функций.

Смежные вопросы