mpsc::Receiver
cannot be Sync
since it's methods take &self
. Looking at this comment, this looks like an API design mistake.
Considering that, this wrapper type for Receiver
should be sound?
use std::sync::mpsc::Receiver;
pub struct ThreadSafeReceiver<T>(Receiver<T>);
impl<T> ThreadSafeReceiver<T> {
pub fn new(r: Receiver<T>) -> Self { Self(r) }
pub fn get(&mut self) -> &Receiver<T> { &self.0 }
}
unsafe impl<T> Sync for ThreadSafeReceiver<T> {}