Struct core::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 ())
) -> Self
pub const fn new( clone: unsafe fn(_: *const ()) -> RawWaker, wake: unsafe fn(_: *const ()), wake_by_ref: unsafe fn(_: *const ()), drop: unsafe fn(_: *const ()) ) -> Self
从提供的 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