请教一个线程同步问题

lvjadey 2010-09-02 02:57:21
事件:1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20;
线程1:顺序处理事件1 2 3 4 5 6 7 8 9 10;
线程2:顺序处理事件11--20,但是处理事件11前 要求事件1 2必须已经处理完;处理事件12前,事件2 3必须已经处理完;...处理事件19前,要求事件9 10必须处理完,处理事件20前,要求事件10必须已经处理完.
请问这两个线程如何同步呢?
...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiruirui0507 2010-09-02
  • 打赏
  • 举报
回复
这个不太懂,帮楼主顶,不过楼主用线程池试一下,说不定效果不错!
zmshy2128 2010-09-02
  • 打赏
  • 举报
回复
使用boost::thread,挺方便的。

不过这个问题比较特殊,使用threadpool更好办些。样子如下:

{
boost::threadpool::pool tp1(2), tp2(10); //定义两个线程池,tp1可以同时运行2个线程,tp2能同时运行10个(同时运行数目根据实际灵活调整)
tp1.schedule(&task1);
tp1.schedule(&task2);
tp1.wait(); //等待任务1、2完成

tp2.schedule(&task11); //执行任务11
tp1.schedule(&task3);
tp1.wait(); //等待任务3完成

tp2.schedule(&task12); //执行任务12
tp1.schedule(&task4);
tp1.wait(); //等待任务4完成

.......
tp2.schedule(&task18); //执行任务18
tp1.schedule(&task10);
tp1.wait(); //等待任务10完成

tp2.schedule(&task19); //执行任务19
tp2.schedule(&task20); //执行任务20

tp2.wait(); //等待任务11~20都完成。
}


以上代码仅供参考,直接在回复框中敲的,未进行实际编译检测。
bing_bing 2010-09-02
  • 打赏
  • 举报
回复
等答案。
wind_breez 2010-09-02
  • 打赏
  • 举报
回复
信标可否?
DontKissBossAss 2010-09-02
  • 打赏
  • 举报
回复
11 的线程 

for(int j = 11; j <19; j++)
{
waitforsigleobject(1楼的事件);
}

主义边界,别死锁了
羽飞 2010-09-02
  • 打赏
  • 举报
回复
用一个主线程控制,每完成一个任务向主线程发送一个消息,启动线程时主线程查看条件是否满足
DontKissBossAss 2010-09-02
  • 打赏
  • 举报
回复
for(int i = 2, i < = 10; i++)
{
setevent(自动重置的事件);
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧