ACE 开发者
文章
日志
文件
圈子
论坛
业内新闻
意见建议
求职招聘
.Net技术
项目管理经验交流
常用工具
IBM Rational
敏捷技术
数据库
中间件
P2P技术
服务器端程序开发
Tcp/IP和Socket
C++学习
开发心得和读书笔记
ACE综合应用
ACE基础应用
海阔天空
您的位置:
ACE 开发者
>>
论坛
>>
ACE基础应用
>>
查看帖子
字体:
小
中
大
ACE_TP_Reactor的奇怪问题
wishel 发表于: 2008-8-06 23:24 来源:
ACE 开发者
根据说明文档,ACE_TP_Reactor使用了Leader/Followers pattern,某一时刻只有一个leader thread可以运行某一个handle的handler。即保证在该handle上并发产生的events会被serialized。
但是在5.6版自带的examples\Reactor\TP_Reactor中的例子却认为这里有一个bug(并没有保证上面说的serialization),详见该目录里的readme文件。
最新回复
wishel at 2008-8-07 09:33:07
没体力看源码,猜测一下原因:
有多个线程同时运行reactor的run_event_loop。
对同一socket,发生一个readmask event后,被一个线程处理(handle_input)。假如在这个线程还没处理完毕返回之前,对方又传过来数据,又会产生一个readmask event,这时这个event就会被另一个空闲的线程处理,那么此时这两个线程就会并发运行。
而所谓的serialization是指,当一个socket上同时发生readmask和writemask时,会被一个线程串行处理。如上所述,如果是先后发生,就不一定保证串行化。
以上仅为猜测,等有时间再做进一步求证。
winston at 2008-8-07 10:23:58
有道理。
我也碰见过这类问题。有些事务,的确需要串行化,保证一个地址来的数据,能被一个线程顺序处理。不然因为线程调度的关系,会产生处理顺序颠倒的问题。我做的操作是用队列进行缓冲和分离,分离到不同的处理队列,这样就能保证了。
查看全部回复
我也来说两句
最新更新主题
关于ACE_Proactor的两个问题
ACE链接问题
linux 配置ACE的问题
VC下创建ACE_Select_Reactor出错
修正错误
求助
Proactor如何获得链接的地址?...
关于ACE Reactor服务器
关于select_reactor的问题
ACE_Hash_Map_Manager的open
月度关注热点
VC下创建ACE_Select_Reactor出错
关于select_reactor的问题
register_handler的问题
linux 配置ACE的问题
ACE内存管理
修正错误
ACE_Hash_Map_Manager的open
Proactor如何获得链接的地址?...
关于ACE Reactor服务器
求助
最新回复
有多个线程同时运行reactor的run_event_loop。
对同一socket,发生一个readmask event后,被一个线程处理(handle_input)。假如在这个线程还没处理完毕返回之前,对方又传过来数据,又会产生一个readmask event,这时这个event就会被另一个空闲的线程处理,那么此时这两个线程就会并发运行。
而所谓的serialization是指,当一个socket上同时发生readmask和writemask时,会被一个线程串行处理。如上所述,如果是先后发生,就不一定保证串行化。
以上仅为猜测,等有时间再做进一步求证。
我也碰见过这类问题。有些事务,的确需要串行化,保证一个地址来的数据,能被一个线程顺序处理。不然因为线程调度的关系,会产生处理顺序颠倒的问题。我做的操作是用队列进行缓冲和分离,分离到不同的处理队列,这样就能保证了。