OwnWaterloo 发表于 2014-03-23 18:26

回复 6# windoze

很有价值的实际经验,谢谢分享~

windoze 发表于 2014-03-24 11:38

回复 10# linux_c_py_php

Lua那个,我记得你不是在讨论HSHA和LF的区别么?不应该是单线程的啊?

关于超时,我目前的解决方案是:
1. 每次读写操作都先设置一个timer
2. 读写回调中cancel timer,timer回调中cancel读写操作,但是这个cancel不一定有效,尤其是当你在后面还有一个排队层的时候,有可能回调已经进入了队列,此时就无法撤消了。
3. 读写回调中检查timer回调的结果,timer回调中也要检查读写回调的结果,只有两个回调都被触发之后才算是操作完成。
4. 由于排队层后面是一个线程池,连个回调可能被分派到不同的线程,所以还有一些race condition,目前我是犯懒用ASIO里面的strand解决这个问题, 否则还要做很多额外的工作。
目前这种两个回调的方案会对所有的操作带来额外的开销,所以想看看有没有什么办法。

zylthinking 发表于 2014-03-24 13:12

回复 1# windoze

靠, 这他娘的要收藏啊

   

linux_c_py_php 发表于 2014-03-24 17:02

windoze 发表于 2014-03-24 11:38 static/image/common/back.gif
回复 10# linux_c_py_php

Lua那个,我记得你不是在讨论HSHA和LF的区别么?不应该是单线程的啊?


对于asio这种异步timer异步撤销的问题,我感觉最简单的就是1个异步请求1把mutex,通过”标记删除“解决,相当于变“异步取消”为“同步取消”。

windoze 发表于 2014-03-25 00:36

回复 14# linux_c_py_php

这不还是相当于要两次回调都完成才能真正返回么?

wander__漫游世界 发表于 2014-08-04 14:14

说实在,C++没看懂,求C

daniel_11 发表于 2014-08-05 10:11

高上大阿,收藏先。

cobras 发表于 2014-08-05 14:21

win32对于超时很好处理。因为几乎全部的同步接口都有一个超时参数。直接使用就行了。

cobras 发表于 2014-08-05 14:23

如果要自己实现超时功能。在定时器回调函数中使用信号量是一个办法。

cobras 发表于 2014-08-05 14:24

而且该信号量应使用与asio相同的信号量。
页: 1 [2] 3 4 5
查看完整版本: 开源项目Fiberized.IO召唤测试