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

关于互斥锁的问题,请高手给于指点

    来源: 互联网  发布时间:2015-12-19

    本文导语:  pthread_mutex_t count_lock; pthread_cond_t count_nonzero; unsigned count; decrement_count () { pthread_mutex_lock (&count_lock); while(count==0)  pthread_cond_wait( &count_nonzero, &count_lock); count=count -1; pthread_mutex_unlock (&count_lock); } increment_count(){ pthr...

pthread_mutex_t count_lock;
pthread_cond_t count_nonzero;
unsigned count;
decrement_count () {
pthread_mutex_lock (&count_lock);
while(count==0) 
pthread_cond_wait( &count_nonzero, &count_lock);
count=count -1;
pthread_mutex_unlock (&count_lock);
}

increment_count(){
pthread_mutex_lock(&count_lock);
if(count==0)
pthread_cond_signal(&count_nonzero);
count=count+1;
pthread_mutex_unlock(&count_lock);
}
  count值为0时,decrement函数在pthread_cond_wait处被阻塞,并打开互斥锁count_lock。此时,当调用到函数increment_count时,pthread_cond_signal()函数改变条件变量,告知decrement_count()停止阻塞。但是在decrement_count()最后一句又打开了互斥锁count_lock,pthread_cond_wait()不是已经打开了互斥锁了吗?我不太明白.

|
pthread_cond_wait 函数原子的执行以下两个操作:
1, 给互斥锁解锁
2, 把调用线程投入睡眠直到另外某个线程调用pthread_cond_signal函数. 
pthread_cond_wait返回前重新给互斥锁加锁.

1,当count!=0的时候不满足while的条件,所以不会调用pthread_cond_wait,所以在while前加的锁还没有被解开,这时候调用pthread_mutex_unlock (&count_lock);来解while前的锁.
2,当调用了pthread_cond_singal函数, pthread_cond_wait重新加锁后返回,继续执行while,如果这时候count!=0, 退出循环,这时候锁还没有解开,需要pthread_mutex_unlock (&count_lock);来解

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












  • 相关文章推荐
  • c++的boost库多线程(Thread)编程(线程操作,互斥体mutex,条件变量)详解
  • 互斥锁的一个问题
  • 在下面这段代码中,如果对init方法只加synchronized关键字,则不能达到互斥的目的,还要再加上static关键字才能互斥,为什么?
  • wince程序防止创建多个实例实现互斥作用
  • 信号量和互斥锁有什么区别??
  • linux进程同步或互斥
  • 进程对串口读写时使用互斥机制吗?
  • 在linux下,如何进行“互斥”和“并发”的控制?
  • 条件变量和互斥量区别
  • 信号量可以用于多进程多线程同时互斥不?
  • 多线程调用ioctl 应在哪进行互斥操作?
  • 关于用文件实现进程互斥的问题
  • 问个多线程网络服务程序的文件操作符的互斥问题
  • 技术文章 iis7站长之家
  • 条件变量是不是一定要搭配互斥锁才能发挥作用?
  • 线程同步读取变量可不可以不用互斥锁
  • 用户态能否实现信号量机制,来提供线程间互斥和同步的功能?
  • linux/unix里的进程互斥问题 ,有关lockf()函数!
  • 关于内核互斥体的问题
  • 互斥锁和信号量,能不能实现先阻塞先唤醒,顺序获取互斥锁和信号量
  • 信号量互斥问题


  • 站内导航:


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

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

    浙ICP备11055608号-3