/// Acquires another sender reference. pub(crate) fn acquire(&self) -> Sender<C> { let count = self.counter().senders.fetch_add(1, Ordering::Relaxed);
// Cloning senders and calling `mem::forget` on the clones could potentially overflow the // counter. It's very difficult to recover sensibly from such degenerate scenarios so we // just abort when the count becomes very large. if count > isize::MAX as usize {
process::abort();
}
Sender {
counter: self.counter,
}
}
/// Releases the sender reference. /// /// Function `disconnect` will be called if this is the last sender reference. pub(crate) unsafefn release<F: FnOnce(&C) -> bool>(&self, disconnect: F) { ifself.counter().senders.fetch_sub(1, Ordering::AcqRel) == 1 {
disconnect(&self.counter().chan);
/// Acquires another receiver reference. pub(crate) fn acquire(&self) -> Receiver<C> { let count = self.counter().receivers.fetch_add(1, Ordering::Relaxed);
// Cloning receivers and calling `mem::forget` on the clones could potentially overflow the // counter. It's very difficult to recover sensibly from such degenerate scenarios so we // just abort when the count becomes very large. if count > isize::MAX as usize {
process::abort();
}
Receiver {
counter: self.counter,
}
}
/// Releases the receiver reference. /// /// Function `disconnect` will be called if this is the last receiver reference. pub(crate) unsafefn release<F: FnOnce(&C) -> bool>(&self, disconnect: F) { ifself.counter().receivers.fetch_sub(1, Ordering::AcqRel) == 1 {
disconnect(&self.counter().chan);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.