问一个多线程通信问题
多个线程读一个队列,如果队列空,则线程睡眠,使用条件变量来同步生产者和消费者。。。那么消费者之间,,如果一个线程收到队列的结尾,,这个线程想告诉其他线程结束,,该使用什么办法 一个消费者读到空之后, 让所有消费者退出?可以在锁范围内, if判断是否自己取走后队列空, 如果是那么设置一个变量quit, 然后broadcast广播一下.
每个消费者的条件变量while条件变更为:
while (queue.empty() && !quit)
{
cond_wait()
} 同意,楼上。使用条件变量pthread_cond_init pthread_cond_wait pthread_cond_signal 回复 2# linux_c_py_php
lock
if(quit)
return;
while(empty)
wait
del_queue();
if(stop)
quit=1;
unlock
这逻辑对吗,,如果这样的话,在lock的情况下return,其他线程就获取不了该锁了吧 逻辑完全不对哦. 本帖最后由 jieao111 于 2012-10-24 18:09 编辑
回复 5# linux_c_py_php
你能写个伪代码不
lock()
whilequeue.empty() and not told_to_exit:
cond_wait()
if told_to_exit:
unlock();
exit thread;
node = queue.front()
queue.pop()
if not queue.size():
told_to_exit = true
pthread_cond_broadcast()
unlock()
页:
[1]