use std::sync::Arc;
use crossbeam_deque::Worker;
use super::thread_pool_worker_queue::ThreadPoolWorkerQueue;
use crate::PoolJob;
pub struct ThreadPoolWorkerRuntime {
worker_index: usize,
local: Worker<PoolJob>,
queue: Arc<ThreadPoolWorkerQueue>,
}
impl ThreadPoolWorkerRuntime {
pub fn new(worker_index: usize) -> Self {
let local = Worker::new_fifo();
let queue = Arc::new(ThreadPoolWorkerQueue::new(worker_index, local.stealer()));
Self {
worker_index,
local,
queue,
}
}
pub fn worker_index(&self) -> usize {
self.worker_index
}
pub fn queue(&self) -> Arc<ThreadPoolWorkerQueue> {
Arc::clone(&self.queue)
}
pub fn pop_front(&self) -> Option<PoolJob> {
self.local.pop()
}
}