linux下的标准C++编程,有没有“事件队列”这些概念?
本帖最后由 iiiyyyhhhsss 于 2011-04-14 15:32 编辑
例如,我有一个线程A,和一个线程B。
我的线程A,会不断地向线程B,发送任务①、②、③、④、⑤……,
问题是,线程B在任务①还没有完成的时候(也即还没有进入阻塞状态),A又有任务②要发来了,
这种情况下,就是说,B比较滞后的情况下,如何把A所发出的任务的命令,都顺利地都让B接收?
我这里:A不可能等B完成了任务①,才发送任务②的命令。。。
说了这么多,不知道大家明不明白我的意思。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
自己建一个队列放任务数据,加互斥锁即可
管道
同意2L~
本帖最后由 iiiyyyhhhsss 于 2011-04-14 16:03 编辑
回复 2# hellioncu
挺有道理的。只可惜我对信号量这些编程不熟悉。
我简化了一下我的任务,大概如下:
main函数开启后,马上创建线程A和B,并进入这两个线程,然后,在线程A和B开始,都是sleep一定时间;
当线程A 睡觉5秒后,向B发送一个触发命令,接着继续去睡觉sleep 5秒;
B在第5秒接到触发后,就醒过来,然后执行“for(int i=0;i<10亿;i++) {cout<<"Hello World!"<<endl;}”;(我相信线程B这个至少得执行很长一段时间。);
当A第2次睡醒后(也即第2次睡了5秒后),再次给B一个命令,要求线程B再一次执行上面那个“10亿次输出的任务”,然后又去睡觉,如此下去,每隔5秒,就会又一次发送一个“10亿次输出的任务”的命令……
那么,这边B一直输出,当第一个“输出10次”完成后,发现,还有一次“输出10次”的任务,完成后,又发现,还有一次……,如此下去。
由于不是很熟悉信号量和互斥锁的编程,有没有谁帮我写一写上面那个例子,我感觉代码应该在30~50行以内可以完成,哪位仁兄,能否帮帮忙?
小弟感激万分啊。。。
回复 4# liexusong
5楼的例子,事紧急,能否帮帮忙?
管道,管道有一定的buffer,可以在B不响应时缓存部分数据。