1、实现多线程方法:
其实就是多个线程同时调用io_service::run
for(int i = 0; i < iThreads; i++){//创建线程,函数体是CIoService::run
CThreadPtr oThreadPtr(new CThread(boost::bind(&CIoService::run, &oIoSrv)));
vecThreads.push_back(oThreadPtr);
}
2、多线程调度情况:
asio规定:只能在调用io_service::run的线程中才能调用事件完成处理器。
注:事件完成处理器就是你async_accept、async_write等注册的句柄,类似于回调的东西。
单线程:
如果只有一个线程调用io_service::run,根据asio的规定,事件完成处理器也只能在这个线程中执行。也就是说,你所有代码都在同一个线程中运行,因此变量的访问是安全的。
多线程:
如果有多个线程同时调用io_service::run以实现多线程并发处理。对于asio来说,这些线程都是平等的,没有主次之分。如果你