Является библиотекой libgcrypt потокобезопасной? В случае, если я не разделяю ресурсы этой библиотеки между потоками, но создаю другой контекст в каждом потоке. Язык программирования C++.Является ли libgcrypt потокобезопасным?
-2
A
ответ
0
Documentation говорит, libgcrypt
потокобезопасно с условиями:
Как уже упоминалось ранее, библиотека Libgcrypt потокобезопасно если вы придерживаться следующих требований:
- Если вы используете pthread и виджеты приложений и напрямую не вызывает exec (даже вызывая функции stdio), могут возникнуть проблемы со всеми типами . Будущие версии Libgcrypt будут пытаться очистить с помощью pthread_atfork, но даже это может привести к проблемам. Это общая проблема практически со всеми приложениями, использующими pthread и fork.
- Функция gcry_check_version должна быть вызвана перед любой другой функцией в библиотеке. Чтобы добиться этого в многопоточных программах, , вы должны синхронизировать память по отношению к другим потокам, которые также хотят использовать Libgcrypt. Для этого достаточно вызвать gcry_check_version, прежде чем создавать другие потоки, используя Libgcrypt1.
- Как и функция gpg_strerror, функция gcry_strerror не является потокобезопасной. Вместо этого вы должны использовать gpg_strerror_r.
С дополнительной оговоркой:
По крайней мере, это верно для POSIX нитей, так как pthread_create является функцией, которая синхронизирует память с отношени других потоков. Существует много функций, которые имеют это свойство, полный список может содержать в POSIX, IEEE Std 1003.1-2003, Базовые определения, выпуск 6, в определение термина «Синхронизация памяти». Для других потоков могут применяться пакеты, более спокойные или более строгие правила.