当前位置:网站首页>B_QuRT_User_Guide(20)
B_QuRT_User_Guide(20)
2022-06-11 02:38:00 【weixin_38498942】
B_QuRT_User_Guide(20)
13 条件变量
线程使用条件变量根据共享数据项中的值同步它们的执行。条件变量在线程通常必须连续轮询数据项直到它包含特定值的情况下很有用——使用条件变量线程可以无需轮询即可完成相同的任务。
条件变量始终与关联的互斥锁(第 5 节)一起使用,以确保在没有线程争用的情况下检查和更新共享数据项。
对于等待共享数据项的特定条件的线程,它必须首先锁定控制对数据项的访问的互斥锁。 如果条件不满足,则线程对条件变量执行等待条件操作(挂起线程并解锁互斥锁)。
对于一个线程要在共享数据项上发出一个条件为真的信号,它必须首先锁定控制对数据项的访问的互斥锁,然后执行信号条件操作,最后显式解锁互斥锁。
信号条件操作用于唤醒单个等待线程。 如果多个线程都在等待一个条件变量,它们都可以通过广播条件操作被唤醒。
注意:未能使用条件变量正确锁定和解锁互斥锁可能导致线程永远不会挂起(或暂停但从未唤醒)。
因为 QuRT 允许线程被虚假条件唤醒,所以线程应始终在被唤醒时验证目标条件。
条件变量是支持以下操作的共享对象:
- qurt_cond_broadcast()
- qurt_cond_destroy()
- qurt_cond_init()
- qurt_cond_signal()
- qurt_cond_wait()
- qurt_cond_wait2()
- Data Types
13.1 qurt_cond_broadcast()
13.1.1 功能文档
13.1.1.1 void qurt_cond_broadcast ( qurt_cond_t ∗ cond )
通知多个等待线程指定条件为真。
当线程希望在共享数据项上广播条件为真时,它必须执行以下过程:
- 锁定控制对数据项访问的互斥锁。
- 执行广播条件操作。
- 解锁互斥锁。
注意:未能正确锁定和解锁条件变量的互斥体可能会导致线程永远不会挂起(或暂停但从未唤醒)。
仅将条件变量与常规互斥锁一起使用——尝试使用递归互斥锁或优先级继承互斥锁会导致未定义的行为。
相关数据类型
qurt_cond_t
参数
| in | cond | 指向要发出信号的条件变量对象的指针。 |
返回值
None.
依赖关系
None.
13.2 qurt_cond_destroy()
13.2.1 功能文档
13.2.1.1 void qurt_cond_destroy ( qurt_cond_t ∗ cond )
销毁指定的条件变量。
注意:条件不再使用时必须销毁。 不这样做会导致 QuRT 内核中的资源泄漏。
不得破坏仍在使用的条件。 如果发生这种情况,则 QuRT 的行为是未定义的。
相关数据类型
qurt_cond_t
参数
| in | cond | 指向要销毁的条件变量对象的指针。 |
返回值
None.
13.3 qurt_cond_init()
13.3.1 功能文档
13.3.1.1 void qurt_cond_init ( qurt_cond_t ∗ cond )
初始化一个条件变量对象。
相关数据类型
qurt_cond_t
参数
| out | cond | 指向已初始化条件变量对象的指针。 |
返回值
None.
依赖关系
None.
13.4 qurt_cond_signal()
13.4.1 功能文档
13.4.1.1 void qurt_cond_signal ( qurt_cond_t ∗ cond )
通知等待线程指定条件为真。
当线程希望在共享数据项上发出条件为真信号时,它必须执行以下过程:
- 锁定控制对数据项访问的互斥锁。
- 执行信号条件操作。
- 解锁互斥锁。
注意:未能正确锁定和解锁条件变量的互斥锁可能会导致线程永远不会挂起(或暂停但从未唤醒)。
仅将条件变量与常规互斥锁一起使用——尝试使用递归互斥锁或优先级继承互斥锁会导致未定义的行为。
相关数据类型
qurt_cond_t
参数
| in | cond | 指向要发出信号的条件变量对象的指针。 |
返回值
None.
依赖关系
None.
13.5 qurt_cond_wait()
13.5.1 功能文档
13.5.1.1 void qurt_cond_wait ( qurt_cond_t ∗ cond, qurt_mutex_t ∗ mutex )
挂起当前线程,直到指定条件为真。 当线程希望等待共享数据项的特定条件时,它必须执行以下过程:
- 锁定控制对数据项访问的互斥锁。
- 如果条件不满足,对条件变量进行等待条件操作(挂起线程,解锁互斥锁)。
注意:未能正确锁定和解锁条件变量的互斥体可能会导致线程永远不会挂起(或暂停但从未唤醒)。
仅将条件变量与常规互斥锁一起使用——尝试使用递归互斥锁或优先级继承互斥锁会导致未定义的行为。
相关数据类型
qurt_cond_t
qurt_mutex_t
参数
| in | cond | 指向要等待的条件变量对象的指针。 |
| in | mutex | 指向与要等待的条件变量关联的互斥锁的指针。 |
返回值
None.
依赖关系
None.
13.6 qurt_cond_wait2()
13.6.1 功能文档
13.6.1.1 void qurt_cond_wait2 ( qurt_cond_t ∗ cond, qurt_rmutex2_t ∗ mutex )
挂起当前线程,直到指定条件为真。 当线程希望等待共享数据项的特定条件时,它必须执行以下过程:
- 锁定控制对数据项访问的互斥锁。
- 如果条件不满足,对条件变量进行等待条件操作(挂起线程,解锁互斥锁)。
注意:未能正确锁定和解锁条件变量的互斥体可能会导致线程永远不会挂起(或暂停但从未唤醒)。
仅将条件变量与常规互斥锁一起使用——尝试使用递归互斥锁或优先级继承互斥锁会导致未定义的行为。
这是与 qurt_cond_wait() 相同的 API,在使用 qurt_rmutex2_t 类型的互斥锁时使用此版本。
相关数据类型
qurt_cond_t
qurt_rmutex2_t
参数
| in | cond | 指向要等待的条件变量对象的指针。 |
| in | mutex | 指向与要等待的条件变量关联的互斥锁的指针。 |
返回值
None.
依赖关系
None.
13.7 数据类型
本节介绍条件变量服务的数据类型。
- 条件变量在QuRT 中表示为qurt_cond_t 类型的对象。
13.7.1 数据结构文档
13.7.1.1 union qurt_cond_t
QuRT 条件变量类型。
边栏推荐
- helm 部署traefik ingress
- Flink开发环境搭建及WordCount
- Error excluded identifier before '(' token, grpc enumeration class compilation error
- [C language classic]: inverted string
- 靠贴牌飞利浦冲击上市,德尔玛的自有品牌又该如何“起跳”?
- 位置数据融合表3
- Net core Tianma XingKong series - Interface Implementation for dependency injection and mutual conversion of database tables and C entity classes
- 学习太极创客 — ESP8226 (二)
- 银行选择电子招标采购的必要性
- 【新晋开源项目】动态配置化任务编排框架 Gobrs-Async 加入Dromara开源社区
猜你喜欢

TCP/IP

同一个用户的两次请求SessionId竟然不一致-----记录问题

How to handle error code 30204-44 when installing office 2016 in win10?
![[MySQL 45 lecture -12] lecture 12 the reason why MySQL has a wind attack from time to time](/img/db/aeadbc4f3189a9809592d2a4714d22.jpg)
[MySQL 45 lecture -12] lecture 12 the reason why MySQL has a wind attack from time to time

What is ttfb

RS232/RS485转4G DTU 上传基于Modbus协议的温湿度传感器数据到远程TCP服务器

Google Gmail mailbox marks all unread messages as read at once

. Net module and assembly - NET Module vs Assembly

AOSP ~ 修改WebView默认实现

逃离大城市的年轻人:扛住了房价和压力,没扛住流行病
随机推荐
6 best WordPress Image optimizer plug-ins to improve WordPress website performance
Link list of high frequency written interview question brushing summary (distribution explanation & code annotation)
AOSP ~ WIFI默认开启 + GPS默认关闭 + 蓝牙默认关闭 + 旋转屏幕关闭
How to add two factor authentication for WordPress websites
二叉树最小最低公共祖先
学习太极创客 — ESP8226 (二)
Explanation of spark common parameters
How can Delma's own brand "take off" when Philips is listed on the market?
List filtering, sorting, verification and other processing methods
AOSP - Developer mode is enabled by default
从绿联冲刺IPO,看手机配件市场沉浮录
[189. rotation array]
Forest v1.5.22 发布!支持Kotlin
The two request sessionids of the same user are inconsistent ----- record the problem
数据库唯一索引和普通索引的区别?
Will your company choose to develop data center?
微信模版消息errcode“:40165,“errmsg“:“invalid weapp pagepath
Flink开发环境搭建及WordCount
VMware虚拟机IP,网关设置。虚拟机ping不通外网
Istio安装与使用