日期:2014-05-16  浏览次数:20819 次

单个生产者线程,单个消费者线程,用 cond、mutex还是sem?
现有两个线程 P,C:
  当线程 P 接受到来自网络的数据时,会给一个信号表示 C 可以开始工作了(条件变量var);
  当线程 C wait 到 var 时,将 var 置为不可用并开始工作。

  var 的值只有 0 和 1,即条件变量。

现在程序分别用 pthread_cond_t 和 sem_t 均实现了 var。
前者使用还要上锁和注册线程处理函数;
后者存在 var 值 >1 的情况,C wait 时还要循环自检 var 至 1 时才开始工作。

问题:
  对于“单个生产者线程,单个消费者线程,两者同步使用条件变量而不是信号量”的这种模型,使用那种方式比较妥当:
  (1)var 用 pthread_cond_t 来实现;
  (2)var 用 sem_t 来实现;
  (3)var 直接用 pthread_mutex_t 来实现。

望达人指教,谢谢!

------解决方案--------------------
互斥锁其实就可以看作是一种二值信号量。
加锁=信号值减去1,变成0
解锁=信号值加上1,变成1

从效率上说,信号量的效果是最好的,而直接用互斥锁实现是最简单的。

------解决方案--------------------
一对一,信号量和互斥锁都可以的;多对一,我用互斥锁,信号量我用的很少。