加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 从一个线程中提升asio – SSL async_read和async_write

发布时间:2020-12-16 04:57:42 所属栏目:百科 来源:网络整理
导读:我知道OpenSSL,boost asio SSL实现是基于的,不允许并发SSL_read()和SSL_write()(即SSL_read()和SSL_write()由不同的线程执行). 从同一个线程调用SSL套接字上的boost asio async_read()和async_write()是否安全? 谢谢 解决方法 boost::asio::ssl:::stream 的
我知道OpenSSL,boost asio SSL实现是基于的,不允许并发SSL_read()和SSL_write()(即SSL_read()和SSL_write()由不同的线程执行).

从同一个线程调用SSL套接字上的boost asio async_read()和async_write()是否安全?

谢谢

解决方法

boost::asio::ssl:::stream的要求是线程安全;它没有要求哪个线程可以启动操作:

Distinct objects: Safe.

Shared objects: Unsafe. The application must also ensure that all asynchronous operations are performed within the same implicit or explicit strand.

如果应用程序只有一个线程处理io_service,并且async_read()和async_write()是从该线程内启动的,那么它是安全的,因为操作和完成处理程序在隐式链中运行.

另一方面,如果多个线程正在处理io_service,则需要显式链. async_read()和async_write()操作需要从一个strand中启动,而完成处理程序需要由同一个strand包装.

有关Boost.Asio的线程安全要求,线索和组合操作的更多详细信息,请参阅this答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读