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包裹起来