2个pthread条件变量可以共享相同的互斥锁吗?

时间:2010-10-31 06:50:51

标签: c++ multithreading pthreads

我浏览了http://www.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html中的文档,但未明确提及。任何迅速的回应将非常感谢。

2 个答案:

答案 0 :(得分:25)

是。这是常见的实践:

典型示例:

mutex queue_mutex; 
cond queue_is_not_full_cond;
cond queue_is_not_empty_cond;

push() 
   lock(queue_mutex)
      while(queue is full)
        wait(queue_is_not_full_cond,queue_mutex);
      do push...
      signal(queue_is_not_empty_cond)
   unlock(queue_mutex)

pop() 
   lock(queue_mutex)
      while(queue is empty)
        wait(queue_is_not_empty_cond,queue_mutex);
      do pop...
      signal(queue_is_not_full_cond)
   unlock(queue_mutex)

答案 1 :(得分:18)

是。如果您有等待的条件,这有时候是一个好主意。例如,您可能有“not full”和“not empty”等的队列和条件变量...将数据放入队列的人等待“not full”。从队列中取出数据的人等待“不为空”。它们都使用相同的互斥锁。