IO_service在多线程下的使用(C++asio网络库相关)

多线程编译需要链接lpthread库
在这里插入图片描述
g++ -02是优化方式

printer p 注册事件
如果调换thread t和printer p注册事件顺序可能会出现什么都没输出,看操作系统心情。
主线程run也不起作用是因为线程是同时执行的,子线程中会改变io的状态表示IO已经无事件了,所以即使后面又注册了新事件主线程也不会run因为状态已经改变了
在这里插入图片描述
解决方法可以先注册事件执行printer p再run,也可以通过判断io是否是stop再重新开启但不是最正确做法,推荐用前一种
在这里插入图片描述

BOOST strand_.wrap()本身是mutex实现的用于保证多线程下事件回调顺序,同时新回调也要用strand_.wrap包裹起来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了137 篇原创文章 · 获赞 33 · 访问量 1576

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104063444