0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux线程条件变量是什么意思

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-21 11:18 次阅读

条件变量

条件变量用于自动阻塞线程,直到某个特定事件发生或某个条件满足为止,通常情况下,条件变量是和互斥锁一起搭配使用的。使用条件变量主要包括两个动作:

  1. 一个线程等待某个条件满足而被阻塞;
  2. 另一个线程中,条件满足时发出“信号”。

条件变量通常搭配互斥锁来使用,是因为条件的检测是在互斥锁的保护下进行的,也就是说条件本身是由互斥锁保护的,线程在改变条件状态之前必须首先锁住互斥锁,不然就可能引发线程不安全的问题。

初始化和销毁条件变量

#include < pthread.h >

int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
int pthread_cond_destroy(pthread_cond_t *cond);

条件变量的主要操作是发送信号(signal)和等待。发送信号操作即是通知一个或多个处于等待状态的线程,某个共享变量的状态已经改变,这些处于等待状态的线程收到通知之后便会被唤醒,唤醒之后再检查条件是否满足。等待操作是指在收到一个通知前一直处于阻塞状态。

函数 pthread_cond_signal()和 pthread_cond_broadcast()均可向指定的条件变量发送信号,通知一个或多个处于等待状态的线程。调用 pthread_cond_wait()函数是线程阻塞,直到收到条件变量的通知。

通知条件变量

#include < pthread.h >

int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);

pthread_cond_signal()函数至少能唤醒一个线程,而 pthread_cond_broadcast()函数则能唤醒所有线程。

等待条件变量

#include < pthread.h >

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • 变量
    +关注

    关注

    0

    文章

    596

    浏览量

    28112
  • 线程
    +关注

    关注

    0

    文章

    490

    浏览量

    19500
收藏 人收藏

    评论

    相关推荐

    Linux线程编程

    Linux线程编程
    的头像 发表于 08-24 15:42 1716次阅读

    Linux线程间通讯---读写锁和条件变量

    读写锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。件变量线程可用的一种同步机制,条件变量给多个
    的头像 发表于 08-26 20:44 1116次阅读
    <b class='flag-5'>Linux</b>下<b class='flag-5'>线程</b>间通讯---读写锁和<b class='flag-5'>条件</b><b class='flag-5'>变量</b>

    Linux系统中线程同步方式中的条件变量方法

    今天主要和大家聊一聊,如何使用Linux线程同步方式中的条件变量
    发表于 11-08 09:16 428次阅读

    Linux线程线程间同步

    pthread_mutex_lock先加锁,操作完之后pthread_mutex_unlock再解锁。5、线程间同步条件变量:使用条件变量
    发表于 12-08 14:14

    Linux C 多线程编程之互斥锁与条件变量实例详解

    (),只有在没有线程在该条件变量上等待的时候才能注销这个条件变量,否则返回EBUSY。因为Linux
    发表于 06-03 17:13

    浅析linux下的条件变量

      一.条件变量     条件变量是用来等待线程而不是上锁的,条件
    发表于 07-12 08:10

    Linux线程同步方法

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

    Linux系统的线程到底是什么

    的原则,在等待执行的线程之间分配CPU资源,保证各个线程都能得到合理的执行。在Linux、Windows之类的操作系统中,一个或多个线程构成一个进程,共享地址空间和全局
    发表于 12-21 07:27

    Linux C多线程编程之互斥锁与条件变量实例详解

    死锁主要发生在有多个依赖锁存在时, 会在一个线程试图以与另一个线程相反顺序锁住互斥量时发生. 如何避免死锁是使用互斥量应该格外注意的东西。
    的头像 发表于 03-29 11:53 6444次阅读

    Linux线程编程的高效开发

    ,就是可以让 Windows 和 Linux 下让锁的表现统一。 条件变量的置位和复位有两种常用模型:第一种模型是当条件变量置位(signa
    发表于 04-02 14:45 248次阅读

    Linux线程与同步

    典型的UNIX系统都支持一个进程创建多个线程(thread)。在Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的
    发表于 04-02 14:47 329次阅读

    三种Linux中的常用多线程同步方式浅析

    嵌入式linux中文站给大家介绍三种Linux中的常用多线程同步方式:互斥量,条件变量,信号量。
    发表于 05-02 14:49 2897次阅读
    三种<b class='flag-5'>Linux</b>中的常用多<b class='flag-5'>线程</b>同步方式浅析

    详谈Linux操作系统编程的条件变量

    条件变量是用来等待线程而不是上锁的,条件变量通常和互斥锁一起使用。条件
    的头像 发表于 09-27 15:23 1816次阅读
    详谈<b class='flag-5'>Linux</b>操作系统编程的<b class='flag-5'>条件</b><b class='flag-5'>变量</b>

    linux内核中percpu变量的实现

    不会相互影响,所以也就不会有各种多线程问题。 正确的使用thread local变量,能极大的简化多线程开发。所以不管是c/c++/rust,还是java/c#等,都内置了对thread local
    的头像 发表于 01-04 13:39 1685次阅读

    互斥锁及条件变量的使用

    本文主要分为三个部分: 第一部分简要介绍线程的概念及其使用 第二部分主要介绍互斥锁及条件变量的使用(重点探讨pthread_cond_wait) 第三部分参考运行IBM的多线程工作代码
    的头像 发表于 11-10 14:51 246次阅读
    互斥锁及<b class='flag-5'>条件</b><b class='flag-5'>变量</b>的使用