Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 两个pthread条件变量可以共享同一个互斥锁吗?_C++_Multithreading_Pthreads - Fatal编程技术网

C++ 两个pthread条件变量可以共享同一个互斥锁吗?

C++ 两个pthread条件变量可以共享同一个互斥锁吗?,c++,multithreading,pthreads,C++,Multithreading,Pthreads,我查阅了中的文档,但没有明确提到这一点。如能及时回复,将不胜感激 是的。如果你想等待不同的条件,这有时是个好主意。例如,您可能有一个队列和条件变量,用于“未满”和“未空”等。。。有人将数据放入队列等待“未满”。有人从队列中取出数据,等待“notempty”。它们都使用相同的互斥锁。是。这是常见的做法: 典型示例: mutex queue_mutex; cond queue_is_not_full_cond; cond queue_is_not_empty_cond; push() l

我查阅了中的文档,但没有明确提到这一点。如能及时回复,将不胜感激

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

是。这是常见的做法:

典型示例:

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)

谢谢。有相关链接吗?谷歌给出了这个例子:很晚的评论,但实际上建议使用2个condvar和一个互斥锁。例如,在队列情况下,请参阅Butenhof“使用Posix线程编程”。当其他线程没有等待时,为什么要发信号?