【问题标题】:Concurrent access by multiple threads and global mutex多线程并发访问和全局互斥锁
【发布时间】:2016-02-24 19:43:20
【问题描述】:

OpenSSL FAQ 声明它可以在线程应用程序中使用:

1. OpenSSL 线程安全吗?

如果应用设置了线程回调函数,答案是肯定的。

此回调函数引用全局 SSL 锁,因此如果您有 2 个 ssl 连接运行,它们都将使用此全局锁。

但常见问题解答仍在继续:

有限制;例如,一个 SSL 连接不能被多个线程同时使用。大多数 OpenSSL 对象都是如此。

这表明每个 SSL 连接都需要一个额外的互斥锁。它是否正确?还是我不需要为每个 SSL 连接添加额外的互斥锁?

【问题讨论】:

标签: multithreading openssl mutex


【解决方案1】:

这意味着如果你的连接是由多个线程共享的,你需要有一个互斥体来避免它们都同时操纵连接。

只要任何单个连接一次仅由一个线程使用(在大多数应用程序中是正常情况),您就不需要任何进一步的锁定。

【讨论】:

  • 我知道,但是在使用多个连接时,我是否还需要全局互斥锁?即使用CRYPTO_set_locking_callback()?
  • 好的,抱歉这里太密集了,但是我们说的是多连接、多线程还是两者结合?
  • 抱歉不清楚,但我们正在讨论多线程的多个连接。
  • 对于完全使用该库的多个线程,您总是需要设置锁定回调和 threadid 回调。例如,请参阅here 以获得两者的非常简单的实现。 只要你不在线程之间共享从 OpenSSL 获取的对象(例如连接),这就是你所需要的,但是如果你需要在线程之间共享单个连接对象,你需要使确保没有两个线程同时访问连接。
  • Isaaksson 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
相关资源
最近更新 更多