OpenSSL-多线程环境-C ++

时间:2018-08-24 12:50:01

标签: c++ openssl

我正在使用非阻塞套接字和OpenSSL 1.1.0创建简单的Web服务器。

客户端请求在4个线程内处理,并且使用C ++(std::thread)创建线程。

我的问题是:我们可以使用C ++线程使OpenSSL线程对于每个客户端请求安全吗?

我问这个是因为我找到了这个:

  

*)OpenSSL现在使用新的线程API。不再需要        设置锁定回调以在多线程环境中使用OpenSSL。那里        有两种受支持的线程模型: pthreads windows线程。它是        还可以在编译时为“无线程”配置OpenSSL。的        旧的线程API应该不再使用。功能已经        替换为“无操作”兼容性宏。        [亚历山德罗·加迪尼,马特·卡斯威尔]

1 个答案:

答案 0 :(得分:0)

简而言之,默认 openssl 并非线程安全,但是您可以使用一些带有锁(std :: lock_guard)的互锁机制,例如互斥锁(std :: mutex)。或原子数据类型std :: atomic,必须在之前设置一些回调,但是到目前为止,我现在不记得了,请查看此锁定机制示例https://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/crypto/threads/th-lock.c,并阅读本文,其中提供了示例{{3}我认为std :: thread可能会沉迷于成瘾,但我可以在后台使用pthread,但它可以使用本机(依赖于OS)线程机制。