-2

库 libgcrypt 是线程安全的吗?如果我不在线程之间划分这个库的资源,而是在每个线程中创建不同的上下文。C++ 编程语言。

4

1 回答 1

0

文档说,libgcrypt在条件下是线程安全的:

如前所述,如果您遵守以下要求,Libgcrypt 库是线程安全的:

  • 如果您使用 pthread 并且您的应用程序分叉并且不直接调用 exec(甚至调用 stdio 函数),则可能会出现各种问题。Libgcrypt 的未来版本将尝试使用 pthread_atfork 进行清理,但即使这样也可能导致问题。这是几乎所有使用 pthread 和 fork 的应用程序的常见问题。
  • 函数 gcry_check_version 必须在库中的任何其他函数之前调用。要在多线程程序中实现这一点,您必须将内存与也想使用 Libgcrypt 的其他线程同步。为此,在使用 Libgcrypt1 创建其他线程之前调用 gcry_check_version 就足够了。
  • 就像函数 gpg_strerror 一样,函数 gcry_strerror 也不是线程安全的。您必须改用 gpg_strerror_r 。

还有一个警告:

至少对于 POSIX 线程来说是这样,因为 pthread_create 是一个将内存与其他线程同步的函数。有许多具有此属性的函数,完整的列表可以在 POSIX, IEEE Std 1003.1-2003, Base Definitions, Issue 6, 在术语“内存同步”的定义中找到。对于其他线程包,可能适用更宽松或更严格的规则。

于 2017-01-28T14:30:47.570 回答