7.1 条件变量概述

文章介绍了条件变量在多线程编程中的作用,它是通过检查共享数据值实现线程间同步,避免了线程频繁轮询的低效方式。条件变量常与互斥量配合使用,通过pthread_cond_wait进行阻塞和唤醒,提高资源利用效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        条件变量是线程之间同步的另一种方法,互斥量通过控制线程访问数据的形式来实现同步,而条件变量通过类似于共享数据的值来实现线程间同步。

        当没有条件变量时,编程人员可能需要让线程持续轮询(可能位于一个临界区内)来检查一些条件是否满足;这会消耗较多的资源,因为线程可能会较多地保持工作状态。那么条件变量就是替换轮询的高效实现方法。

条件变量往往和互斥量一起使用,使用条件变量的调用顺序如下表所示。

主线程

  • 声明并初始化需要同步的全局数据/变量(譬如“计数值”)
  • 声明并初始化一个条件变量
  • 声明并初始化一个互斥量
  • 创建线程A、B

线程A

  • 一直处理任务,直到一个特定的条件需要被满足(譬如需要“计数值”达到某个大小)
  • 对互斥量上锁,并检查全局变量的值是否满足条件
  • 调用 pthread_cond_wait(),它会阻塞当前线程直到接收到来自线程B的信号;调用 pthread_cond_wait()会自动使用原子操作释放互斥量,使其能够被线程B使用
  • 当接收到信号时,线程被唤醒;互斥量会被自动使用原子操作加锁
  • 显式地对互斥量解锁
  • 继续执行

线程B

  • 处理任务
  • 对互斥量加锁
  • 改变全局变量的值
  • 检查全局变量的值是否满足了线程A处理的要求,如果满足则对线程A发送信号
  • 对互斥量解锁
  • 继续执行

主线程

  • 连接子线程/继续执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mega_Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值