Struct mmtk::scheduler::worker::WorkerGroup
source · pub(crate) struct WorkerGroup<VM: VMBinding> {
pub workers_shared: Vec<Arc<GCWorkerShared<VM>>>,
state: Mutex<Option<WorkerCreationState<VM>>>,
}
Expand description
A worker group to manage all the GC workers.
Fields§
Shared worker data
state: Mutex<Option<WorkerCreationState<VM>>>
The stateful part. None
means state transition is underway.
Implementations§
source§impl<VM: VMBinding> WorkerGroup<VM>
impl<VM: VMBinding> WorkerGroup<VM>
sourcepub fn initial_spawn(&self, tls: VMThread, mmtk: &'static MMTK<VM>)
pub fn initial_spawn(&self, tls: VMThread, mmtk: &'static MMTK<VM>)
Spawn GC worker threads for the first time.
sourcefn create_workers(
&self,
local_work_queues: Vec<Worker<Box<dyn GCWork<VM>>>>,
mmtk: &'static MMTK<VM>
) -> Vec<Box<GCWorker<VM>>>
fn create_workers( &self, local_work_queues: Vec<Worker<Box<dyn GCWork<VM>>>>, mmtk: &'static MMTK<VM> ) -> Vec<Box<GCWorker<VM>>>
Create GCWorker
instances.
sourcepub fn prepare_surrender_buffer(&self)
pub fn prepare_surrender_buffer(&self)
Prepare the buffer for workers to surrender their GCWorker
structs.
sourcepub fn surrender_gc_worker(&self, worker: Box<GCWorker<VM>>) -> bool
pub fn surrender_gc_worker(&self, worker: Box<GCWorker<VM>>) -> bool
Return the GCWorker
struct to the worker group.
This function returns true
if all workers returned their GCWorker
structs.
sourcepub fn worker_count(&self) -> usize
pub fn worker_count(&self) -> usize
Get the number of workers in the group
sourcepub fn has_designated_work(&self) -> bool
pub fn has_designated_work(&self) -> bool
Return true if there’re any pending designated work
pub fn get_and_clear_worker_live_bytes(&self) -> usize
Trait Implementations§
impl<VM: VMBinding> Sync for WorkerGroup<VM>
We have to persuade Rust that WorkerGroup
is safe to share because the compiler thinks one
worker can refer to another worker via the path “worker -> scheduler -> worker_group ->
Surrendered::workers
-> worker” which is cyclic reference and unsafe.
Auto Trait Implementations§
impl<VM> !RefUnwindSafe for WorkerGroup<VM>
impl<VM> Send for WorkerGroup<VM>
impl<VM> Unpin for WorkerGroup<VM>
impl<VM> !UnwindSafe for WorkerGroup<VM>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more