代码之家  ›  专栏  ›  技术社区  ›  Fanatic23

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

  •  14
  • Fanatic23  · 技术社区  · 14 年前

    http://www.opengroup.org/onlinepubs/009695399/functions/pthread_cond_wait.html 但这并没有被明确提及。如能及时回复,将不胜感激。

    2 回复  |  直到 14 年前
        1
  •  18
  •   xscott    14 年前

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

        2
  •  26
  •   ludgo    7 年前

    对。这是常见的做法:

    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)