Является ли библиотека libgcrypt поточно-ориентированной? В случае, если я не делю ресурсы этой библиотеки между потоками, но создаю различный контекст в каждом потоке. Язык программирования C ++.
Документация говорит, 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, в
определение термина «синхронизация памяти». Для другой темы
пакеты, более спокойные или более строгие правила могут применяться.
Других решений пока нет …