Openssl 在多线程环境中是否需要id_回调?

Openssl 在多线程环境中是否需要id_回调?,openssl,Openssl,我认为当在多线程环境中使用时,locking\u callback足以锁定/解锁OpenSSL的共享数据结构。那么为什么需要id\u回调?也就是说,什么时候OpenSSL需要调用它 我认为在多线程环境中使用时,锁定\ U回调就足以锁定/解锁OpenSSL的共享数据结构,那么为什么需要id \ U回调呢?也就是说,什么时候OpenSSL需要调用它 OpenSSL有大约40个锁。您可以搜索加密锁。您可以搜索CRYPTO\u LOCK\u以了解受保护的组件,如CRYPTO\u LOCK\u UI、CR

我认为当在多线程环境中使用时,
locking\u callback
足以锁定/解锁OpenSSL的共享数据结构。那么为什么需要
id\u回调
?也就是说,什么时候OpenSSL需要调用它

我认为在多线程环境中使用时,锁定\ U回调就足以锁定/解锁OpenSSL的共享数据结构,那么为什么需要id \ U回调呢?也就是说,什么时候OpenSSL需要调用它

OpenSSL有大约40个锁。您可以搜索
加密锁
。您可以搜索
CRYPTO\u LOCK\u
以了解受保护的组件,如
CRYPTO\u LOCK\u UI
CRYPTO\u LOCK\u X509\u STORE
CRYPTO\u LOCK\u RAND
CRYPTO\u LOCK\u引擎

隐式线程标识符(如使用线程堆栈的堆栈地址)不是唯一的,因为它们可以重用。例如,从手册页:

线程标识符应该被认为是不透明的:任何使用 pthreads调用中以外的线程ID是不可移植的,可能导致 未指明结果

线程ID只保证在进程中是唯一的。线 可以在连接终止线程后重新使用ID,或者 分离的线程已终止。

因此,OpenSSL很难知道如何获取线程的唯一标识符;如果没有每个唯一线程的唯一标识符,则很难正确记录和调试某些多线程问题。由于问题的微妙之处,OpenSSL只是将其推回到程序员那里,以提供唯一的id

使用pthreads时,需要进行一些调整才能正确使用。例如,对于pthreads,您应该提供一个唯一的每线程计数器。看到和


以下是有关堆栈溢出的一些相关问题:


在OpenSSL中,每个线程都有一个错误队列,因此需要使用线程id来定位将错误代码放入其中的错误队列,我认为这是id_回调的目的之一。

感谢您的回答。“如果没有每个唯一线程的唯一标识符,就很难正确记录和调试一些多线程问题”,所以我可以说这个标识符只是用于记录/调试目的,而不必用于锁定/解锁吗?@Array-OpenSSL没有一种从线程id获取唯一id的通用方法。一个大小并不适合所有情况。你必须提供它。是的,我明白了。我必须提供在多线程环境中使用OpenSSL的id。我想知道的是,除了调试/日志之外,这个id对于锁定/解锁机制是否是必需的?