Является ли glib потокобезопасным?

Я не смог найти никакой информации о безопасности потоков в документации по glib. Думаю, это означает, что я, вероятно, должен предположить, что это НЕ потокобезопасно, но я не уверен, какие общие ресурсы мне следует блокировать.

Есть ли у кого-нибудь опыт работы с безопасностью потоков с использованием glib? Какие рекомендации я могу использовать, чтобы убедиться, что мой код glib является потокобезопасным?

Спасибо!


person Scott Frazer    schedule 10.04.2012    source источник


Ответы (3)


На самом деле справочное руководство glib полно информации о безопасности потоков:

После вызова g_thread_init () GLib становится полностью потокобезопасным (все глобальные данные автоматически блокируются), но отдельные экземпляры структур данных не блокируются автоматически из соображений производительности. Так, например, вы должны координировать доступ к одной и той же GHashTable из нескольких потоков. Двумя заметными исключениями из этого правила являются GMainLoop и GAsyncQueue, которые являются потокобезопасными и не требуют дополнительной блокировки на уровне приложения для доступа из нескольких потоков.

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

person drakide    schedule 11.04.2012

Глобальная политика проста: все потокобезопасны, за исключением функций манипулирования данными. Прочтите здесь: http://developer.gnome.org/glib/stable/glib-programming.html

person DenisKolodin    schedule 10.11.2012

Из справочного руководства по GLib вы можете получить следующее утверждение:

Сам GLib внутренне полностью потокобезопасен (все глобальные данные автоматически блокируются), но отдельные экземпляры структур данных не блокируются автоматически из соображений производительности.

Итак, чтобы дополнить предыдущие ответы, вам не нужно вызывать g_thread_init().

person Mazze    schedule 14.10.2019