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线程栅栏对象占用的内存大小