请教一个线程同步问题
事件: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必须已经处理完.
请问这两个线程如何同步呢?
[解决办法]
用一个主线程控制,每完成一个任务向主线程发送一个消息,启动线程时主线程查看条件是否满足
[解决办法]
11 的线程
for(int j = 11; j <19; j++)
{
waitforsigleobject(1楼的事件);
}
主义边界,别死锁了
[解决办法]
使用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都完成。}
[解决办法]
这个不太懂,帮楼主顶,不过楼主用线程池试一下,说不定效果不错!