由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - c++posix多线程问题请教
相关主题
VC++线程问题HELP:这个死锁是怎么发生的?
拜托推荐多线程和socket的书编程题又一道
多线程的程序设计有什么好书推荐? (转载)C++多线程写网络服务是不是快退出舞台了?
关于多线程锁:锁代码还是锁资源?java里用synchronized包住block就可以保护多线程同步问题了,这就是c里面的mutex吧?
单线程一般都是历史原因c++多线程的工作面试一般会问哪些问题?
mutex一问多线程/进程并发读文件有无开销问题?
问个线程同步的问题多线程下的gdb core dump问题
请问一个多线程与volatile关键字的问题。[合集] 问个多线程的问题
相关话题的讨论汇总
话题: 线程话题: wait话题: broadcast话题: 主线话题: queue
进入Programming版参与讨论
1 (共1页)
w***u
发帖数: 156
1
最近要写一个多线程的应用, 碰到一些问题,
主线程在一开始就create好4个子线程,子线程一开始wait状态,然后主线程开始往下
走,开始task准备分给子线程,然后broadcast给子线程,自己进入wait状态, 子线程
wakeup,做完task,就wait,做后一个子线程完成后,发信号给主线程,然后wait,
主线程在接到信号后,wakeup,继续下一个task, 然后broadcast。问题是主线程激活
到broadcast时间很短, 而子线程从发信号到wait时间长的话,主线程broadcast的信
号就不会正确叫醒子线程,因为那时的子线程还没有进入wait状态。 如何解决呢?其
实就是要实现一个join的功能,但是又不要释放掉子线程,
w***u
发帖数: 156
2
大牛们快来帮帮忙啊
W***o
发帖数: 6519
3
use a lock to synch?

【在 w***u 的大作中提到】
: 最近要写一个多线程的应用, 碰到一些问题,
: 主线程在一开始就create好4个子线程,子线程一开始wait状态,然后主线程开始往下
: 走,开始task准备分给子线程,然后broadcast给子线程,自己进入wait状态, 子线程
: wakeup,做完task,就wait,做后一个子线程完成后,发信号给主线程,然后wait,
: 主线程在接到信号后,wakeup,继续下一个task, 然后broadcast。问题是主线程激活
: 到broadcast时间很短, 而子线程从发信号到wait时间长的话,主线程broadcast的信
: 号就不会正确叫醒子线程,因为那时的子线程还没有进入wait状态。 如何解决呢?其
: 实就是要实现一个join的功能,但是又不要释放掉子线程,

p*u
发帖数: 2454
4
most common way is main thread puts tasks on a message queue, and worker
threads pull from it.
i don't understand why ur worker threads hv to sleep/wait. if u hv to do
this, i assume u use a condition variable to broadcast. u can use a mutex-
protected flag to slow main thread down: worker threads set this flag to
true right before they go to sleep/wait; main thread always checks this flag
before it tries to broadcast.

【在 w***u 的大作中提到】
: 最近要写一个多线程的应用, 碰到一些问题,
: 主线程在一开始就create好4个子线程,子线程一开始wait状态,然后主线程开始往下
: 走,开始task准备分给子线程,然后broadcast给子线程,自己进入wait状态, 子线程
: wakeup,做完task,就wait,做后一个子线程完成后,发信号给主线程,然后wait,
: 主线程在接到信号后,wakeup,继续下一个task, 然后broadcast。问题是主线程激活
: 到broadcast时间很短, 而子线程从发信号到wait时间长的话,主线程broadcast的信
: 号就不会正确叫醒子线程,因为那时的子线程还没有进入wait状态。 如何解决呢?其
: 实就是要实现一个join的功能,但是又不要释放掉子线程,

p***o
发帖数: 1252
5
估计是自己实现的同步逻辑。这个需求用pthread barrier就好。

flag

【在 p*u 的大作中提到】
: most common way is main thread puts tasks on a message queue, and worker
: threads pull from it.
: i don't understand why ur worker threads hv to sleep/wait. if u hv to do
: this, i assume u use a condition variable to broadcast. u can use a mutex-
: protected flag to slow main thread down: worker threads set this flag to
: true right before they go to sleep/wait; main thread always checks this flag
: before it tries to broadcast.

v******y
发帖数: 84
6
同意这个,楼主估计不知道boss - worker pattern
boss不需要和worker沟通
boss产生work load, 放入shared queue (用mutex同步)
boss产生work load时,如果queue 满了,就wait on queue_full condition
worker thread从queue中读取work load,如果queue空,就wait on queue_empty
condition
boss, 产生一个word load, signal 在等的work thread去读
work load 除了完了,就signal boss产生新的work load

flag

【在 p*u 的大作中提到】
: most common way is main thread puts tasks on a message queue, and worker
: threads pull from it.
: i don't understand why ur worker threads hv to sleep/wait. if u hv to do
: this, i assume u use a condition variable to broadcast. u can use a mutex-
: protected flag to slow main thread down: worker threads set this flag to
: true right before they go to sleep/wait; main thread always checks this flag
: before it tries to broadcast.

k***5
发帖数: 583
7
楼主自己把自己绕晕了,不要考虑什么主,子shread,就看成5个shread,然后各个都
pending/sleep在某个signal或mutex,等被唤醒。
p*u
发帖数: 2454
8
he needs to explain this better: "子线程从发信号到wait时间长"

【在 k***5 的大作中提到】
: 楼主自己把自己绕晕了,不要考虑什么主,子shread,就看成5个shread,然后各个都
: pending/sleep在某个signal或mutex,等被唤醒。

1 (共1页)
进入Programming版参与讨论
相关主题
[合集] 问个多线程的问题单线程一般都是历史原因
怎样提高C#计算程序的performance?mutex一问
关于多线程编程的一个问题问个线程同步的问题
多线程有什么优化的方法?请问一个多线程与volatile关键字的问题。
VC++线程问题HELP:这个死锁是怎么发生的?
拜托推荐多线程和socket的书编程题又一道
多线程的程序设计有什么好书推荐? (转载)C++多线程写网络服务是不是快退出舞台了?
关于多线程锁:锁代码还是锁资源?java里用synchronized包住block就可以保护多线程同步问题了,这就是c里面的mutex吧?
相关话题的讨论汇总
话题: 线程话题: wait话题: broadcast话题: 主线话题: queue