当前位置: 技术问答>linux和unix
复杂的线程同步问题,请教高手
来源: 互联网 发布时间:2015-06-04
本文导语: 如何做到: 1。一个线程a定期通知一组工作线程停止 2。工作线程接到停止信号后做收尾工作并暂停,所有的工作线程都暂停后通知线程a 3.线程a得到通知后更新一些数据后再通知工作线程重新开始工作 哪位由经验庆...
如何做到:
1。一个线程a定期通知一组工作线程停止
2。工作线程接到停止信号后做收尾工作并暂停,所有的工作线程都暂停后通知线程a
3.线程a得到通知后更新一些数据后再通知工作线程重新开始工作
哪位由经验庆说说
1。一个线程a定期通知一组工作线程停止
2。工作线程接到停止信号后做收尾工作并暂停,所有的工作线程都暂停后通知线程a
3.线程a得到通知后更新一些数据后再通知工作线程重新开始工作
哪位由经验庆说说
|
首先需要知道得是你的这些工作线程是怎么驱动的,
如果是消息驱动的,就用msg来实现。
如果是那种傻转的,就用signal来实现。
通知a的话可以用semphore来实现,
线程间通讯还是比较简单的,毕竟地址空间等资源是共享的。
如果是消息驱动的,就用msg来实现。
如果是那种傻转的,就用signal来实现。
通知a的话可以用semphore来实现,
线程间通讯还是比较简单的,毕竟地址空间等资源是共享的。
|
全局变量: lock_count,由a和工作线程工作设置
全局变量: can_continue,由线程a设定
全局变量: work_cond(pthread_cond_t),work_mutex(pthread_mutex_t)用于工作线程等待
worker_thread中:
1.can_continue = 1; //工作线程可以继续
2.can_continue = 0;
lock_count++;
a中:
1.如果想工作线程停下来:
can_continue = 0;
lock_count = 0;
2.等待直到lock_count=工作线程数目,然后做修改动作
3. can_continue = 1;
pthread_cond_signal(&work_cond);
全局变量: can_continue,由线程a设定
全局变量: work_cond(pthread_cond_t),work_mutex(pthread_mutex_t)用于工作线程等待
worker_thread中:
1.can_continue = 1; //工作线程可以继续
2.can_continue = 0;
lock_count++;
a中:
1.如果想工作线程停下来:
can_continue = 0;
lock_count = 0;
2.等待直到lock_count=工作线程数目,然后做修改动作
3. can_continue = 1;
pthread_cond_signal(&work_cond);