Skip to content

Commit

Permalink
Use array-macro to simplify AtomicCell LOCKS
Browse files Browse the repository at this point in the history
  • Loading branch information
Daniel-Bloom-dfinity committed Jul 25, 2021
1 parent 800ca61 commit b1a24d3
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 99 deletions.
1 change: 1 addition & 0 deletions crossbeam-utils/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ nightly = []
[dependencies]
cfg-if = "1"
lazy_static = { version = "1.4.0", optional = true }
array-macro = "2.1.0"

# Enable the use of loom for concurrency testing.
#
Expand Down
101 changes: 2 additions & 99 deletions crossbeam-utils/src/atomic/atomic_cell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#![allow(clippy::let_unit_value)]

use crate::primitive::sync::atomic::{self, AtomicBool};
use array_macro::array;
use core::cell::UnsafeCell;
use core::fmt;
use core::mem;
Expand Down Expand Up @@ -684,105 +685,7 @@ fn lock(addr: usize) -> &'static SeqLock {
// In order to protect from such cases, we simply choose a large prime number for `LEN`.
const LEN: usize = 97;

static LOCKS: [SeqLock; LEN] = [
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
SeqLock::new(),
];
static LOCKS: [SeqLock; LEN] = array![_ => SeqLock::new(); LEN];

// If the modulus is a constant number, the compiler will use crazy math to transform this into
// a sequence of cheap arithmetic operations rather than using the slow modulo instruction.
Expand Down

0 comments on commit b1a24d3

Please sign in to comment.