条件锁即在一定条件下触发,那什么时候适合用条件锁呢,那当然是你在等待一个符合的条件下触发。一个常用的例子就是在线程中无限循环执行一个操作,但是这个操作并不是需要 一直执行而是在满足一定条件下执行。例如:
int changed = 0;
static pthread_mutext_t mtx = PTHREAD_MUTEX_INITALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITALIZER;
void* thread_fun(void* argc)
{
while(true)
{
if(changed)
{
printf("i am changed");
}else
{
//方法一
sleep(1);
//方法二
pthread_mutex_lock(&mtx);
pthread_cond_wait(&cond,&mtx);
pthread_mutex_unloc(&mtx);
}
}
}
void main()
{
pthread_t threadId;
pthread_create(&threadId,NULL,thread_fun,NULL);
sleep(10);
changed = 1;
//方法二
pthread_cond_signal(&cond);
}
  从上面的例子可以看出当changed变量为1的时候才执行操作,其他时间不执行,如果使用sleep函数,那么将会出现执行不及时的现象,如果使用条件锁的话那么会在条件改变的时候立即执行,效果比较好。
  那如果使用条件锁呢?
  首先是条件锁的创建,条件锁创建有两种方法,一种是静态方法,既使用静态变量的方式:
  static pthread_cond_t cond = PTHREAD_COND_INITALIZER;
  另外一种是动态的方法:
  pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);
  其次是等待: pthread_cond_wait,此方法可以加超时的时间,如果没有超时的时间则是一直等待。
  再次是触发:当达到条件之后使用 pthread_cond_signal通知
  但是在多线程里面必须要配合互斥锁,因为在多线程的条件下如果不使用互斥锁,那么就有可能同时多个执行ptread_cond_wait会造成混乱。
 
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8052),我们将立即处理。
 
相关课程:

  课程介绍:

Linux操作系统作为常见的底层操作系统,在软件开发、软件测试过程中都会经常接触和使用,很多企业的服务器都是Linux环境的,那么对于测试人员,在Linux环境下进行测试,就必须掌握相应的Linux命令。本课程就将为大家讲解Linux的安装以及常用命令的使用,也适合开发工程师作为Linux入门学习。

 
了解更多课程内容及课程安排,可咨询QQ 2852509883 或致电客服 400-821-0951(工作日9:00-17:30)
【看这里】技术交流、拓展人脉、领取福利欢迎加入博为峰网校大课堂>>>