[library/std] Replace condv while loop with cvar.wait_while.

`wait_while` takes care of spurious wake-ups in centralized place,
reducing chances for mistakes and potential future optimizations
(who knows, maybe in future there will be no spurious wake-ups? :)
This commit is contained in:
Taras Tsugrii 2023-08-01 21:53:21 -07:00
parent aa8462b6df
commit a090e97f68

View File

@ -130,11 +130,8 @@ pub fn wait(&self) -> BarrierWaitResult {
let local_gen = lock.generation_id;
lock.count += 1;
if lock.count < self.num_threads {
// We need a while loop to guard against spurious wakeups.
// https://en.wikipedia.org/wiki/Spurious_wakeup
while local_gen == lock.generation_id {
lock = self.cvar.wait(lock).unwrap();
}
let _guard =
self.cvar.wait_while(lock, |state| local_gen == state.generation_id).unwrap();
BarrierWaitResult(false)
} else {
lock.count = 0;