libgcrypt 是线程安全的吗?

Posted

技术标签:

【中文标题】libgcrypt 是线程安全的吗?【英文标题】:Is libgcrypt thread-safe? 【发布时间】:2017-01-28 14:24:24 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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, Base Definitions, Issue 6, in 术语“内存同步”的定义。对于其他线程 包,更宽松或更严格的规则可能适用。

【讨论】:

以上是关于libgcrypt 是线程安全的吗?的主要内容,如果未能解决你的问题,请参考以下文章

HashMap是线程安全的吗?如何实现线程安全?

lua引擎本身是线程安全的吗

列表是线程安全的吗?

+= 运算符在 Python 中是线程安全的吗?

Spring框架中的Bean是线程安全的吗?如果线程不安全,要如何处理?

这个函数是线程安全的吗?