jieao111 发表于 2012-10-24 16:19

问一个多线程通信问题

多个线程读一个队列,如果队列空,则线程睡眠,使用条件变量来同步生产者和消费者。。。那么消费者之间,,如果一个线程收到队列的结尾,,这个线程想告诉其他线程结束,,该使用什么办法

linux_c_py_php 发表于 2012-10-24 16:29

一个消费者读到空之后, 让所有消费者退出?

可以在锁范围内, if判断是否自己取走后队列空, 如果是那么设置一个变量quit, 然后broadcast广播一下.

每个消费者的条件变量while条件变更为:

while (queue.empty() && !quit)
{
   cond_wait()
}

32322791 发表于 2012-10-24 16:31

同意,楼上。使用条件变量pthread_cond_init pthread_cond_wait pthread_cond_signal

jieao111 发表于 2012-10-24 17:33

回复 2# linux_c_py_php



lock
if(quit)
return;
while(empty)
wait
del_queue();
if(stop)
quit=1;
unlock

这逻辑对吗,,如果这样的话,在lock的情况下return,其他线程就获取不了该锁了吧   

linux_c_py_php 发表于 2012-10-24 17:40

逻辑完全不对哦.

jieao111 发表于 2012-10-24 17:53

本帖最后由 jieao111 于 2012-10-24 18:09 编辑

回复 5# linux_c_py_php
你能写个伪代码不


   

linux_c_py_php 发表于 2012-10-24 20:31

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]
查看完整版本: 问一个多线程通信问题