轮询API
轮询API用于并发地等待满足多个条件中的任何一个。
概念
轮询API的主要函数是k_poll(),它在概念上与POSIXpoll()函数非常相似,只是它在内核对象而不是文件描述符上操作。
轮询API允许单个线程并发地等待一个或多个条件的满足,而不需要主动地单独查看每个条件。
这样的条件是有限的:
- 一个信号量变得可用
- 内核FIFO包含准备好检索的数据
- 轮询信号生成
希望等待多个条件的线程必须定义一个轮询事件数组,每个条件对应一个。
数组中的所有事件都必须经过初始化,然后才能对数组进行轮询。
每个事件必须指定必须满足哪种类型的条件,以便更改其状态以发出满足请求条件的信号。
每个事件都必须指定它希望满足该条件的内核对象。
每个事件都必须指定在满足条件时使用哪种操作模式。
每个事件可以选择指定一个标记将多个事件分组在一起,由用户决定。
除了内核对象之外,还有一个可以直接发出信号的轮询信号伪对象类型。
一旦k_poll()函数所等待的条件之一被满足,k_poll()函数就会返回。当k_poll()返回时,如果它们在调用k_poll()之前实现,或者由于内核的优先多线程特性,可能有多个实现。调用者必须查看数组中所有轮询事件的状态,以找出哪些事件已完成以及要
本文介绍了Zephyr内核的轮询API,用于并发等待多个条件。它类似POSIX的函数,允许线程等待信号量、FIFO等条件。轮询API包括事件初始化、操作模式、信号处理等,适用于资源有限的场景,如轻量级二进制信号量。使用轮询API可以节省堆栈空间,并减少线程间的竞争。
订阅专栏 解锁全文
353

被折叠的 条评论
为什么被折叠?



