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 是线程安全的吗?的主要内容,如果未能解决你的问题,请参考以下文章