Rollup merge of #76649 - nicbn:arc-spin-loop-hint, r=m-ou-se

Add a spin loop hint for Arc::downgrade

Adds `hint::spin_loop()` to the case where `Arc::downgrade` spins.
This commit is contained in:
Jonas Schievink
2020-10-24 14:11:56 +02:00
committed by GitHub
2 changed files with 3 additions and 0 deletions
+1
View File
@@ -118,6 +118,7 @@
#![feature(raw_ref_op)]
#![feature(rustc_attrs)]
#![feature(receiver_trait)]
#![feature(renamed_spin_loop)]
#![feature(min_specialization)]
#![feature(slice_ptr_get)]
#![feature(slice_ptr_len)]
+2
View File
@@ -10,6 +10,7 @@
use core::convert::{From, TryFrom};
use core::fmt;
use core::hash::{Hash, Hasher};
use core::hint;
use core::intrinsics::abort;
use core::iter;
use core::marker::{PhantomData, Unpin, Unsize};
@@ -764,6 +765,7 @@ pub fn downgrade(this: &Self) -> Weak<T> {
loop {
// check if the weak counter is currently "locked"; if so, spin.
if cur == usize::MAX {
hint::spin_loop();
cur = this.inner().weak.load(Relaxed);
continue;
}