C多线程编程---条件变量

本文介绍了C语言中多线程编程的条件变量原理,强调了其在资源同步中的作用,通过与互斥量结合确保线程安全。文章详细讲解了条件变量的初始化、信号发送与接收(pthread_cond_signal, pthread_cond_broadcast)、等待及超时等待(pthread_cond_wait, pthread_cond_timedwait)以及销毁等函数的使用,并给出了具体的操作步骤和实例。" 126428133,14561329,C++学习笔记:引用、动态内存与函数进阶,"['C++编程', '软件开发', '数据类型', '内存分配', '函数', '面向对象']

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

1、原理

假设我们需要解决这样一个问题:一个列表记录需要处理的任务。一个线程往此列表添加任务,一个线程processTask处理此列表中的任务。这个问题的一个关键点在于processTask怎么判断任务列表不为空。一般有两种方法:
一. processTask线程不断查询任务列表是否为空。
二. 当列表不为空的时候,通知processTask处理相关任务。

第一种方法往往是在一个while循环中判断列表是否为空,如果为空则睡眠一段时间,如果不为空那么把任务取出来并加以处理。此方案需要一个睡眠时间的平衡点如果睡眠时间太长,任务得不到及时的处理,降低效率。如果睡眠时间过短占用CPU资源,却什么都不做,浪费CPU做其它事情的时间。
第二种方法就比较靠谱了,只有当列表不为空的时候才占用CPU的时间,其它时间什么都不做除了睡觉(线程挂起)。此方案就是我们所说的条件变量(condition variable)。

一般条件变量(condition variable)和互斥量结合使用。条件变量(condition variable)用途线程间资源的同步,互斥量(mutex)用途资源的互斥(唯一访问)。 一个通俗易懂的例子: 你上厕所的时候,条件变量告诉你厕所是否为空位,有空位你上,没空位你看着别人上。有空位的时候你不可能跟别人一起吧,所以你得给卫生间上锁也就是互斥量了。
线程a等待某个条件成立,条件成立,线程a才继续向下执行。线程b的执行使条件成立,条件成立之后唤醒线程a,以继续执行。这个条件就是条件变量
pthread_cond_t 就是条件变量类型

2、头文件

#include <pthread.h>

3、 函数库

3.1、初始化
pthread_cond_t cond = PTHREA
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值