首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

单个生产者线程,单个消费者线程,用 cond、mutex还是sem?该如何处理

2012-04-30 
单个生产者线程,单个消费者线程,用 cond、mutex还是sem?现有两个线程 P,C:当线程 P 接受到来自网络的数据时

单个生产者线程,单个消费者线程,用 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

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

[解决办法]
一对一,信号量和互斥锁都可以的;多对一,我用互斥锁,信号量我用的很少。

热点排行