条件变量
条件变量是一种同步原语,它使线程能够等待特定条件发生。
概念
可以定义任意数量的条件变量(仅受可用RAM的限制)。每个条件变量都由其内存地址引用。
若要等待条件为真,线程可以使用条件变量。
条件变量基本上是一个线程队列,当某些执行状态(即某些条件)不符合需要(通过等待条件)时,线程可以自己设置这些线程队列。函数k_condvar_wait()
在原子学上执行以下步骤;
- 释放最后一个获得的互斥锁。
- 将当前的线程放入条件变量队列中。
一些其他线程,当它改变状态,然后可以唤醒一个(或多个)等待线程,从而允许他们继续使用k_condvar_signal()
或k_condvar_broadcast()
,然后它:
- 重新获得之前发布的互斥锁。
- 从k_condvar_wait()返回。
条件变量必须初始化才能使用。
实现
定义条件变量
使用一个变量类型为k_condvar
来定义一个条件变量。然后,必须通过调用k_condvar_init()
来初始化它。
以下代码定义了一个条件变量:
struct k_condvar my_condvar;
k_condvar_init(&my_condvar);
或者,