当前位置:  技术问答>linux和unix

单个生产者线程,单个消费者线程,用 cond、mutex还是sem?

    来源: 互联网  发布时间:2017-02-19

    本文导语:  现有两个线程 P,C:     当线程 P 接受到来自网络的数据时,会给一个信号表示 C 可以开始工作了(条件变量var);     当线程 C wait 到 var 时,将 var 置为不可用并开始工作。     var 的值只有 0 和...

现有两个线程 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

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

|
一对一,信号量和互斥锁都可以的;多对一,我用互斥锁,信号量我用的很少。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • redhat 7.0 - 7.2 (kernel 2.4.4)下的单个文件大小<2G? 急!!!
  • 如何限制单个用户的存储文件大小?
  • 单个java程序如何在jbuilder中运行?
  • 怎样用vj编译单个文件
  • sccs只能管理单个程序,有没有能管理多个程序的工具?
  • pureftpd能否限制单个上传文件大小
  • solaris 如何察看单个进程打开的最大文件数,如何设置为最大?
  • 如何在redhat9在配置单个网卡对应多个IP地址?
  • 请问:从zip中解压出单个文件的库
  • vim 单个关键字缩进规则更改
  • 谁能告诉我下不同操作系统对单个文件大小的限制
  • jb是怎样编译单个java文件的?
  • 单个消息队列能实现进程间聊天功能吗?
  • 多核CPU或多CPU的单个CPU使用率如何取得?
  • 装win98时怎么在dos下删除单个文件?
  • 请问怎么对一个数组排序,数组的内容是字符串,可能是单个也可能是多个?
  • Unix 设置单个用户的访问命令
  • 50分的题:如何给oracle减肥?在linux多目录的环境下查找体积最大的单个文件??
  • SQLServer 数据库变成单个用户后无法访问问题的解决方法
  • 设置ASP.NET页面的运行超时时间详细到单个页面及站点


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3