美文网首页
线程同步之条件变量

线程同步之条件变量

作者: 爱秋刀鱼的猫 | 来源:发表于2017-03-04 11:42 被阅读0次

在多线程编程中,线程的同步是一个宏观的概念,其实其内部的实现包含两个部分:一是互斥,二是线程之间的相互依赖关系。
就好像是一个团队开发一个软件项目,加入有两个小组,分别是:研发小组和测试小组。按照我们的经验,一个软件项目,只有当研发小组将其开发出来以后,测试小组才可以对其进行测试,这说明测试小组是依赖于研发小组的。如果我们把该软件项目看成是一个共享资源,这个情景就可以看作是一个线程的同步问题。


image.png

为了实现线程的同步,我们引入条件变量。条件变量的内部是一个等待队列,用于放置等待的线程,线程在条件变量中等待通知。


image.png

对于等待变量的操作,也是对一个共享资源的操作,所以也需要互斥锁对其进行保护。所以在线程同步的问题中,互斥锁和等待变量常常是一起使用的。

我们使用pthread_cond_wait(pthread_cond_t * cond,pthread_mutex_t * mutex)这一函数来实现等待变量的等待操作。
这里就要好好说一下pthread_cond_wait(pthread_cond_t * cond,pthread_mutex_t * mutex)这一函数的内部实现原理:
伪代码说明:

pthread_cond_wait(pthread_cond_t * cond,pthread_mutex_t * mutex)
{
1、unlock(mutex);//这里首先要将互斥锁打开,
2、lock(mutex);//然后使用互斥锁上锁
3、将线程自己插入到条件变量的等待队列当中
4、unlock(&mutex);
5、当前等待的线程阻塞<--------等待其他线程通知唤醒
6、该线程被唤醒以后,lock(&mutex);
7、将自己从等待队列中删除
}

这就能解释为什么在下图中,pthread_cond_wait(&r-> cond,&r->mutex)放在pthread_mutex_unlock(&r->mutex)之前。


image.png

相关文章

  • 线程同步之条件变量

    在多线程编程中,线程的同步是一个宏观的概念,其实其内部的实现包含两个部分:一是互斥,二是线程之间的相互依赖关系。就...

  • APUE//线程同步3

    使用条件变量进行线程同步 barrier,屏障

  • C++面向对象多线程学习笔记_同步对象

    通常而言,同步变量和条件变量声明为全局,所以,多个线程可以访问它们。虽然这需要使用同步变量的所有线程提供了方便,但...

  • 线程同步——条件变量+锁

    参考博文:https://www.cnblogs.com/zhangxuan/p/6526854.html 简介 ...

  • 线程同步-条件变量解析

    概念 线程同步的方法有多种,互斥量、信号量、条件变量、读写锁等。互斥量在允许或阻塞对临界区的访问上是很有效的,线程...

  • C++实现 生产者消费者模型

    condition_variable条件变量可以用来实现线程同步,它必须与互斥量mutex配合使用。条件变量适用场...

  • APR分析-线程同步篇

    APR分析-线程同步篇 在线程同步方面,Posix标准定义了3种同步模型,分别为互斥量、条件变量和读写锁。APR也...

  • Python高级知识点学习(八)

    线程同步 - condition介绍 多线程中的另外一个重要点就是condition:条件变量。condition...

  • Linux线程同步

    Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。 Linux线程同步-----互斥锁...

  • 2019-07-23

    线程同步 互斥量mutex,读写锁rwlock,条件变量cond demo:https://www.jianshu...

网友评论

      本文标题:线程同步之条件变量

      本文链接:https://www.haomeiwen.com/subject/jjwdgttx.html