GCC Atomic Builtins вместо pthread? - PullRequest
7 голосов
/ 21 июля 2009

Я нашел следующую статью: Используйте предоставляемые GCC операции атомарной блокировки для замены функций pthread_mutex_lock

Это относится к GCC Atomic Builtins .

В статье предлагается использовать атомарные встроенные функции GCC вместо инструментов синхронизации pthread.

Это хорошая идея?

PS. Сообщение MySQL явно вводит в заблуждение. Atomic Builtins не может заменить все инструменты pthread. Например, блокировка требует, чтобы, если блокировка не может быть получена, поток должен был ждать. Другими словами, он просит ОС ждать, чтобы ожидание было пассивным. Простое встроенное GCC не может этого сделать.

Ответы [ 5 ]

5 голосов
/ 21 июля 2009

Это хорошая идея?

Нет, если вы когда-нибудь намереваетесь скомпилировать код с чем-то другим, кроме gcc. Pthreads вызывает у вас какие-то конкретные проблемы?

2 голосов
/ 22 июля 2009

Если вы уже используете pthread, а функции блокировки pthread уже делают то, что вы хотите, лучше всего использовать функции блокировки pthread.

Эти атомарные встраивания являются строительными блоками для примитивов более высокого уровня; Написание этих высокоуровневых примитивов, как правило, сложно, и любые ошибки могут вызвать ошибки, которые могут занять много времени (так как они обычно зависят от времени). Если у вас уже есть библиотека с высокоуровневыми примитивами, которые делают то, что вы хотите, и достаточно быстры для ваших нужд (и не предполагаете, что они слишком медленные только из-за того, что вам нужно выполнить вызов функции), лучше не изобретать колесо.

1 голос
/ 22 июля 2009

Нет. Встроенные модули GCC, вероятно, имеют смысл для тех, кто пишет операционные системы, libc и, возможно, сам pthreads, но для обычного приложения нет причин не использовать подход pthreads.

И даже если вы всегда используете GCC, однажды вы захотите запустить инструмент статического анализа, который не будет обрабатывать все клиентские расширения GCC.

0 голосов
/ 29 сентября 2010

встроенные атомы имеют смысл, если вы хотите улучшить производительность. Встроенные функции позволяют минимизировать конфликты, вызванные сериализацией мьютексов. Когда вы используете мьютексы и создаете критический сеанс, вы сериализуете доступ к этому разделу вашего кода; в коде производительности вы можете попытаться избежать конфликтов, используя специфичные для потока данные, а когда невозможно, используя атомарные данные. Последний случай - блокировка, и при блокировке минимизируйте время, в течение которого блокировка удерживается (используя обмен сообщениями и двойную проверку блокировки, хотя некоторые утверждают, что она не работает - работает для меня).

...