Expand description
§XWOS RUST:线程栅栏
线程栅栏是用于协调多个线程并行工作的同步机制。
线程栅栏在创建时,会指明有多少个线程槽。 当线程到达线程栅栏时会阻塞并等待,直到指定数量的线程都达到线程栅栏,所有线程被同时唤醒。
§创建
XWOS RUST的线程栅栏可使用 Br::new()
创建。
- 可以创建具有静态生命周期
static
约束的全局变量:
use xwrust::xwos::sync::br::*;
static GLOBAL_BR: Br<8> = Br::new();
- 也可以使用
alloc::sync::Arc
在heap中创建:
extern crate alloc;
use alloc::sync::Arc;
use xwrust::xwos::sync::br::*;
pub fn xwrust_example_br() {
let br = Arc::new(Br::<8>::new());
}
§初始化
无论以何种方式创建的线程栅栏,都必须在使用前调用 Br::init()
进行初始化:
pub fn xwrust_example_br() {
GLOBAL_BR.init();
br.init();
}
§等待所有线程到达栅栏
Br::wait()
可用于等待所有线程到达栅栏。
- 当线程栅栏中的线程数量小于指定数量,线程会阻塞等待。
- 当线程栅栏中的线程数量达到指定数量,全部线程被唤醒,然后返回
BrError::Ok
。 - 当线程阻塞等待被中断时,返回
BrError::Interrupt
。
§限时等待所有线程到达栅栏
Br::wait_to()
可用于限时等待所有线程到达栅栏。
- 当线程栅栏中的线程数量小于指定数量,线程会阻塞等待,等待时会指定一个唤醒时间点。
- 当线程栅栏中的线程数量达到指定数量,全部线程被唤醒,然后返回
BrError::Ok
。 - 当线程阻塞等待被中断时,返回
BrError::Interrupt
。 - 当到达指定的唤醒时间点,线程被唤醒,并返回
BrError::Timedout
。
§获取线程栅栏中线程槽的数量
可以通过方法 Br::get_num()
获取线程栅栏中线程槽的数量。
§绑定到信号选择器
线程栅栏是 同步对象 ,可以通过方法 Br::bind()
将线程栅栏绑定到信号选择器 Sel<M>
上,通过 Sel<M>
,单一线程可以同时等待多个不同的 同步对象 。
线程栅栏采用 非独占 的方式进行绑定。
§示例
Structs§
- 线程栅栏对象结构体
- 线程栅栏的选择子
Enums§
- 线程栅栏的错误码
Constants§
- XWOS线程栅栏对象占用的内存大小