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

有关线程同步pthread_cond_wait()问题请教

    来源: 互联网  发布时间:2017-04-05

    本文导语:  现有如下代码: 有两个条件变量cond和cond2 ;一把锁mutex 线程1 在等待: pthread_cond_wait(&cond, &mutex); 线程2: pthread_mutex_unlock(&mutex); pthread_cond_signal(&cond); pthread_cond_wait(&cond2, &mutex); 请问各位大侠:线程2pthread_cond_wa...

现有如下代码:
有两个条件变量cond和cond2 ;一把锁mutex

线程1 在等待:

pthread_cond_wait(&cond, &mutex);

线程2:

pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond);
pthread_cond_wait(&cond2, &mutex);

请问各位大侠:线程2pthread_cond_wait(&cond2, &mutex);是不是会同线程1抢占mutex锁呢?


|


那你这根本就是错误的用法!
先lock mutex, 再wait ,再unlock mutex才是正确用法 。!
man pthread_cond_wait
The  mutex  must  be
       locked  by  the calling thread on entrance to pthread_cond_wait. Before
       returning to the calling thread,  pthread_cond_wait  re-acquires  mutex
       (as per pthread_lock_mutex).

|


这个可以不加锁.
得注意分析下,是否会出现信号丢失的情况导致的问题.
比如另一线程还未pthread_cond_wait,而当前线程已经signal了,这时信号就会丢失.然后另一线程才wait上去.
当然一般wait的用法是:
lock
if(!condition)
    pthread_cond_wait
//process
unlock.
这种情况没signal不用加锁,没问题..
但如果没有condition((当然改变condition是需要加锁操作的)),则可能会出现signal丢失的情况,导致目标线程没能被及时唤醒.这种情况你就得结合程序分析下,会不会有问题.

|


你这种写法,还有一种可能会发生的情况 。 那就是死锁。。因为按照语义,signal发信号是唤醒当前的等待线程。。所以如果signal在线程1 wait前,并且在线程2 signal到wait间起作用的话,那么这个signal就丢失了!!最后死锁。。。
这就是不按照POSIX语义规则使用的可能情况,也许正常情况不会发生。但如果系统比如负载很重等等原因,还是有可能会发生的。。。

|
线程2执行pthread_crond_wait()的时候会将锁释放掉。只有当函数返回了才会重新枷锁。

    
 
 

您可能感兴趣的文章:

  • 有关线程创建的问题
  • 请解释一下有关线程的这个问题!
  • 有关Linux下开发程序--上万个线程问题。菜鸟问(来者有分,谢谢大家)
  • 请教有关线程返回值的问题
  • 帮忙怎样写有关 unix下的线程的问题(在线等待,急用,谢谢)
  • 有关不同线程同时访问同一公共Vector变量的问题(欢迎讨论)
  • 初来乍到,有关多线程的一个问题,
  • 有关编译线程代码时出现的一些错误提示。。
  • 求助:推荐LINUX有关进程、线程方面讲的比较好的书(用户态的)
  • 有关线程退出的问题
  • 有关线程的一些数据结构及函数求教。。
  • linux 能开的 最大 线程 和 进程 数 和什么有关?
  • 有关java多线程的问题,闲人免进。
  • 请帮我看一下程序,有关多线程
  • 有关线程内存分配的问题
  • 有关java线程方面的问题,请高手帮忙
  • 急,在线等待,有关多线程applet的问题
  • 满分跪求解决方法:有关linux多线程问题.....
  • 求助:有关linux下的线程编程问题-生产者消费者问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教有关英文简历方面的词句!
  • 高分请教:请问怎么才能得到最近所有有关文件操作(新建,删除等)的记录
  • 有关"文件的权限变更"问题请教!!
  • 请教有关samba共享名大小写的问题
  • 请教一个有关JDBC连接方式的问题
  • 请教几个有关JAVA的英语单词!
  • 请教有关手机方面的问题
  • 请教有关命令行参数问题
  • 请教一个有关参数化类型的问题??
  • 请教:有关Java的数据计算的问题???
  • 请教有关jdk库的文档的问题
  • 请教有关自动ftp的问题!谢谢
  • 请教有关ssh登录问题
  • 请教有关konqueror 问题?
  • 请教有关显示器的问题!
  • 编程语言 iis7站长之家
  • 请教有关JBuilder的一个问题
  • 请教一个脚本执行的问题,有关权限的
  • 请教一个有关word的问题
  • 有关signal handler,请教!
  • ​有关Docker的八个令人难以置信的事实
  • 有关内码转换(跟HttpServletRequest有关)
  • 求有关png图像处理的libpng库的有关中文资料
  • 大家推荐一下有关LINUX7有关的网络编程的书。最好是比较全面的!比较经典的。
  • 求教有关smartupload的问题,有关就给分!!
  • 有关KDevelop-3.0.4-0.1.i386.rpm的有关软件包
  • 有关在sco unix5.0.4下有关网卡设置的问题(非常急,高分相送)
  • 有关snmp的一个很菜,但是困扰了我很久的问题,有关工作原理的,望大家赐教
  • 有关KDevelop编程的资料
  • 有关集群与数据同步
  • 有关报表打印(在JAVA,WEB下应用)急用!


  • 站内导航:


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

    ©2012-2021,