|
楼主 |
发表于 2010-1-13 22:13:21
|
显示全部楼层
我觉得还是多个线程可以执行run_reactor_event_loop()的,但是书上很多地方都强调只能一个线程执行run_reactor_event_loop()
指的是创建Select_Reactor的线程和执行run_reactor_event_loop()的线程必须是同一个。
举例来说
例1:
线程1:
ACE_Select_Reactor *select_reactor = new ACE_Select_Reactor;
ACE_Reactor *reactor= new ACE_Reactor(select_reactor,1);
reactor->run_reactor_event_loop();
这种是可以的。
例2:
线程1:
ACE_Select_Reactor *select_reactor1 = new ACE_Select_Reactor;
ACE_Reactor *reactor1= new ACE_Reactor(select_reactor1,1);
reactor1->run_reactor_event_loop();
线程2:
ACE_Select_Reactor *select_reactor2 = new ACE_Select_Reactor;
ACE_Reactor *reactor2= new ACE_Reactor(select_reactor2,1);
reactor2->run_reactor_event_loop();
这样也是可以的
例3:
线程1:
ACE_Select_Reactor *select_reactor = new ACE_Select_Reactor;
ACE_Reactor *reactor1= new ACE_Reactor(select_reactor,1);
线程2:
reactor->run_reactor_event_loop();
这样是不行的
线程2必须这样才行
reactor->owner(ACE_OS::thr_self ());
reactor->run_reactor_event_loop();
以上是我的理解,理解错的地方,还请论坛里的高手指教一下。 |
|