diff --git a/crossbeam-deque/src/deque.rs b/crossbeam-deque/src/deque.rs index 4aa69a68f..e8d0be471 100644 --- a/crossbeam-deque/src/deque.rs +++ b/crossbeam-deque/src/deque.rs @@ -284,6 +284,28 @@ impl Worker { } } + /// Checks if the worker and the provided stealer are pointing to the same underlying queue. + /// + /// # Examples + /// + /// ``` + /// use crossbeam_deque::Worker; + /// + /// let w_1 = Worker::::new_lifo(); + /// let w_2 = Worker::::new_fifo(); + /// + /// let s_1 = w_1.stealer(); + /// let s_2 = w_2.stealer(); + /// + /// assert!(w_1.donates_to(&s_1)); + /// assert!(w_2.donates_to(&s_2)); + /// assert!(!w_1.donates_to(&s_2)); + /// assert!(!w_2.donates_to(&s_1)); + /// ``` + pub fn donates_to(&self, stealer: &Stealer) -> bool { + Arc::ptr_eq(&self.inner, &stealer.inner) + } + /// Resizes the internal buffer to the new capacity of `new_cap`. #[cold] unsafe fn resize(&self, new_cap: usize) {