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相同的信号量。