当我在调试一些代码时,这更多的是一种假设。假设我有一个应用程序(名为X),它调用lib通过TLS加密的SMTP连接发送电子邮件,同时X正在与另一个lib对话,该lib正在通过同一libcrypto lib建立另一个TLS套接字,那么出现某种特定(和奇怪的)情况的可能性是什么?
我有点摸不着头脑,这段代码运行得很好,直到我们添加了Skype SDK,它通过TLS连接到Skype服务器,从那时起,我们实际上可以让这个问题重现,但我有点困惑为什么。(我可能忽略了显而易见的事情,但我将从真正奇怪的可能性开始)
发布于 2011-10-10 22:38:12
一般说来,这是可能的--但是写得好的库应该对多重访问是健壮的。您可能希望查看文档,看看它们的API是否是可重入的(甚至是thred安全的)。
如果它是线程安全的,那么(假设libcrypto作者没有犯错误)你可以确定这不是问题的原因。
如果它是可重入的,那么在两个(或更多)线程中使用这个库的任何东西都应该在访问时同步(例如。使用互斥锁),但如果部分代码不是由您编写的,并且您没有选择修改它,那么您将陷入困境。我唯一能想到的就是使用另一个版本的libcrypto,这样系统就会创建另一个与其内部结构无关的实例。这是丑陋的灵魂,在用户机器上可能会表现得很奇怪。
发布于 2011-10-10 22:39:55
有一个完整的手册页专门介绍OpenSSL库和线程的用法:man 3 threads。如果您的应用程序有多个使用OpenSSL库的线程,则需要使用此函数。
https://stackoverflow.com/questions/7713983
复制相似问题