浅谈Linux条件变量的使用

 更新时间:2017年01月05日 10:02:35   投稿:jingxian  
下面小编就为大家带来一篇浅谈Linux条件变量的使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Linux线程同步之间存在多种机制,条件变量是一种类似操作系统里提到的生产者-消费者算法的同步机制,允许线程以无竞争的方式等待特定条件的发生。

示例伪代码:

void* Thread1(void){
  while(线程运行条件成立){
    …
    pthread_mutex_lock(qlock);
    while(条件成立)
pthread_cond_wait(qcond,qlock);
或者
pthread_cond_wait(qcond,qlock,timeout);
      reset条件变量…
    pthread_mutex_unlock(qlock);
  }
}

void* Thread2(void){
  while(线程运行条件成立){
    …
    pthread_mutex_lock(qlock);
    set了条件变量…//可以发送处理信号
    pthread_cond_signal(qcond);
    或者
    pthread_cond_broadcast(qcond);
    pthread_mutex_unlock(qlock);
  }
}

条件变量需要配合互斥量一起使用,互斥量作为参数传入wait函数,函数把调用线程放到等待条件的线程列表上,然后对互斥量解锁,这两个是原子操作。当线程等待到条件,从wait函数返回之前,会再次锁住互斥量。

1.Lock
2.Unlock
3.等待
4.Lock
5.Unlock

第2,3,4步是wait的内部操作

在wait被唤醒后,还需要在while中去检查条件,这是为了防止“惊群效应”,比如有两个线程同时阻塞在wait,先后醒来,快的线程做完处理然后把条件reset了,并且对互斥量解锁,此时慢的线程在wait里获得了锁(即第4步)返回,还再去做处理就会出问题。

以上就是小编为大家带来的浅谈Linux条件变量的使用全部内容了,希望大家多多支持脚本之家~

相关文章

  • 解决Linux Tensorflow2.0安装问题

    解决Linux Tensorflow2.0安装问题

    这篇文章主要介绍了Linux Tensorflow2.0安装问题及解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • web服务器iptables配置脚本实现代码

    web服务器iptables配置脚本实现代码

    这篇文章主要介绍了web服务器iptables配置脚本实现代码的相关资料,需要的朋友可以参考下
    2017-06-06
  • 101个脚本之建立linux回收站的脚本

    101个脚本之建立linux回收站的脚本

    众所周知,linux是没有回收站的,一些人很害怕删错东西(有经验的linux管理员极少范这错误),个人不建议回收站,而应该是培养个人的安全意识。有点小跑题
    2016-08-08
  • CentOS 6.3 安装配置Apache2.2.6的方法(源码编译安装)

    CentOS 6.3 安装配置Apache2.2.6的方法(源码编译安装)

    这篇文章主要介绍了CentOS 6.3 安装配置Apache2.2.6的方法,需要的朋友可以参考下
    2014-11-11
  • 详解Centos7扩展磁盘空间(LVM管理)

    详解Centos7扩展磁盘空间(LVM管理)

    本篇文章主要介绍了详解Centos7扩展磁盘空间(LVM管理),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • apache2服务器的搭建和配置步骤详解

    apache2服务器的搭建和配置步骤详解

    其实搭建apache2并不难,只是网上的资料有很多都过时了,之前被误导过好几次,走了很多弯路。趁着这次在本地搭建网站的时机重新捋一下思路,也方便以后有需求的时候查阅,需要的朋友可以参考下。
    2017-04-04
  • CentOS 7中 Apache Web 服务器安装配置教程

    CentOS 7中 Apache Web 服务器安装配置教程

    这篇文章主要介绍了CentOS 7中 Apache Web 服务器安装配置教程,需要的朋友可以参考下
    2018-04-04
  • 解决Debian系统自动更新软件包的问题的方法

    解决Debian系统自动更新软件包的问题的方法

    这篇文章主要介绍了解决Debian系统自动更新软件包的问题的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 比较详细的基于CentOS的WWW服务器架设指南

    比较详细的基于CentOS的WWW服务器架设指南

    本文参考了网上高手的教程和结合自己的实践经验而来。网上关于LAMP安装配置的教程虽然很多,但长篇大论的让你抓不到重点,短小精悍的对新手来说又难了点,所以初次配置时最容易在某个环节卡住,从而打击了学习的激情或者耽误了宝贵的时间。于是就整理出这个学习笔记。如果文中有错误的地方,恳请大家指正,不要误导了初学者。
    2008-06-06
  • Centos6.5升级glibc过程介绍

    Centos6.5升级glibc过程介绍

    大家好,本篇文章给大家分享的是Centos6.5升级glibc过程介绍,感兴趣的同学赶快来看一看吧,如果对你有帮助的话记得收藏一下哦!
    2021-11-11

最新评论