xwrust::xwos::sync

Module br

source
Expand description

§XWOS RUST:线程栅栏

线程栅栏是用于协调多个线程并行工作的同步机制。

线程栅栏在创建时,会指明有多少个线程槽。 当线程到达线程栅栏时会阻塞并等待,直到指定数量的线程都达到线程栅栏,所有线程被同时唤醒。

§创建

XWOS RUST的线程栅栏可使用 Br::new() 创建。

  • 可以创建具有静态生命周期 static 约束的全局变量:
use xwrust::xwos::sync::br::*;

static GLOBAL_BR: Br<8> = Br::new();
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> ,单一线程可以同时等待多个不同的 同步对象

线程栅栏采用 非独占 的方式进行绑定。

§示例

XWOS/xwam/xwrust-example/xwrust_example_br

Structs§

  • 线程栅栏对象结构体
  • 线程栅栏的选择子

Enums§

Constants§