读书人

请问一个线程同步有关问题

发布时间: 2012-02-02 23:57:14 作者: rapoo

请教一个线程同步问题
事件: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更好办些。样子如下:

C/C++ code
{    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都完成。}
[解决办法]
这个不太懂,帮楼主顶,不过楼主用线程池试一下,说不定效果不错!

读书人网 >C语言

热点推荐