读书人

单个生产者线程单个消费者线程用

发布时间: 2012-04-30 22:33:26 作者: rapoo

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

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

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

读书人网 >UNIXLINUX

热点推荐