Merge pull request #314 from Amanieu/spin_loop

This commit is contained in:
Amanieu d'Antras
2022-01-28 13:58:47 +00:00
committed by GitHub
4 changed files with 13 additions and 12 deletions
+6 -6
View File
@@ -2,11 +2,11 @@ name: Rust
on:
push:
branches-ignore:
- trying.tmp
- staging.tmp
branches:
- trying
- staging
pull_request:
env:
RUST_TEST_THREADS: 1
@@ -16,11 +16,11 @@ jobs:
strategy:
matrix:
os: [ubuntu, macos, windows]
channel: [1.41.0, stable, beta, nightly]
channel: [1.49.0, stable, beta, nightly]
feature: [arc_lock, serde, deadlock_detection]
exclude:
- feature: deadlock_detection
channel: '1.41.0'
channel: '1.49.0'
include:
- channel: nightly
feature: nightly
+1 -1
View File
@@ -135,7 +135,7 @@ changes to the core API do not cause breaking changes for users of `parking_lot`
## Minimum Rust version
The current minimum required Rust version is 1.41. Any change to this is
The current minimum required Rust version is 1.49. Any change to this is
considered a breaking change and will require a major version bump.
## License
+2 -2
View File
@@ -6,14 +6,14 @@
// copied, modified, or distributed except according to those terms.
use crate::thread_parker;
use std::sync::atomic::spin_loop_hint;
use core::hint::spin_loop;
// Wastes some CPU time for the given number of iterations,
// using a hint to indicate to the CPU that we are spinning.
#[inline]
fn cpu_relax(iterations: u32) {
for _ in 0..iterations {
spin_loop_hint()
spin_loop()
}
}
+4 -3
View File
@@ -8,7 +8,8 @@
//! A simple spin lock based thread parker. Used on platforms without better
//! parking facilities available.
use core::sync::atomic::{spin_loop_hint, AtomicBool, Ordering};
use core::sync::atomic::{AtomicBool, Ordering};
use core::hint::spin_loop;
use std::thread;
use std::time::Instant;
@@ -42,7 +43,7 @@ impl super::ThreadParkerT for ThreadParker {
#[inline]
unsafe fn park(&self) {
while self.parked.load(Ordering::Acquire) != false {
spin_loop_hint();
spin_loop();
}
}
@@ -52,7 +53,7 @@ impl super::ThreadParkerT for ThreadParker {
if Instant::now() >= timeout {
return false;
}
spin_loop_hint();
spin_loop();
}
true
}