Struct std::task::RawWakerVTable
1.36.0 · source · pub struct RawWakerVTable { /* private fields */ }Expand description
虚拟函数指针表 (vtable),用于指定 RawWaker 的行为。
传递给 vtable 内所有函数的指针是来自封闭的 RawWaker 对象的 data 指针。
仅应在 RawWaker 实现内部从正确构造的 RawWaker 对象的 data 指针上调用此结构体内部的函数。
使用任何其他 data 指针调用所包含的函数之一将导致未定义的行为。
这些函数都必须是线程安全的 (即使 RawWaker 是 !Send + !Sync),因为 Waker 是 Send + Sync,因此唤醒器可以移动到任意线程或由 & 引用调用。
例如,这意味着如果 clone 和 drop 函数管理一个引用计数,它们必须以原子方式进行。
Implementations§
source§impl RawWakerVTable
impl RawWakerVTable
const: 1.36.0 · sourcepub const fn new(
clone: unsafe fn(_: *const ()) -> RawWaker,
wake: unsafe fn(_: *const ()),
wake_by_ref: unsafe fn(_: *const ()),
drop: unsafe fn(_: *const ())
) -> RawWakerVTable
pub const fn new( clone: unsafe fn(_: *const ()) -> RawWaker, wake: unsafe fn(_: *const ()), wake_by_ref: unsafe fn(_: *const ()), drop: unsafe fn(_: *const ()) ) -> RawWakerVTable
从提供的 clone,wake,wake_by_ref 和 drop 函数创建新的 RawWakerVTable。
这些函数都必须是线程安全的 (即使 RawWaker 是 !Send + !Sync),因为 Waker 是 Send + Sync,因此唤醒器可以移动到任意线程或由 & 引用调用。
例如,这意味着如果 clone 和 drop 函数管理一个引用计数,它们必须以原子方式进行。
clone
克隆 RawWaker 时,例如克隆存储 RawWaker 的 Waker 时,将调用此函数。
此函数的实现必须保留 RawWaker 的此附加实例和关联任务所需的所有资源。
在生成的 RawWaker 上调用 wake 应该会唤醒原 RawWaker 会唤醒的相同任务。
wake
在 Waker 上调用 wake 时将调用此函数。
它必须唤醒与此 RawWaker 相关的任务。
此函数的实现必须确保释放与该 RawWaker 实例和关联任务相关联的所有资源。
wake_by_ref
在 Waker 上调用 wake_by_ref 时将调用此函数。
它必须唤醒与此 RawWaker 相关的任务。
该函数与 wake 相似,但不能消耗提供的数据指针。
drop
当 Waker 得到抛弃时,这个函数被调用。
此函数的实现必须确保释放与该 RawWaker 实例和关联任务相关联的所有资源。
Trait Implementations§
source§impl Clone for RawWakerVTable
impl Clone for RawWakerVTable
source§fn clone(&self) -> RawWakerVTable
fn clone(&self) -> RawWakerVTable
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source 执行复制分配。 Read more