Skip to content

Commit 3117105

Browse files
committed
Adjust
1 parent 035a706 commit 3117105

File tree

8 files changed

+46
-40
lines changed

8 files changed

+46
-40
lines changed

homework/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ ctrlc = { version = "3.4.4", optional = true }
2222
cs431 = { git = "https://github.com/kaist-cp/cs431" }
2323
# cs431 = { path = "../cs431" }
2424
loom = { version = "0.7.2", optional = true }
25-
rand = "0.8.5"
25+
rand = "0.9.0"
2626
regex = "1.10.4"

homework/src/elim_stack/base.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ use core::ops::Deref;
44
use std::time;
55

66
use crossbeam_epoch::{Atomic, Guard, Owned, pin};
7-
use rand::{Rng, thread_rng};
7+
use rand::{self, Rng};
88

99
pub(crate) const ELIM_SIZE: usize = 16;
1010
pub(crate) const ELIM_DELAY: time::Duration = time::Duration::from_millis(10);
1111

1212
#[inline]
1313
pub(crate) fn get_random_elim_index() -> usize {
14-
thread_rng().r#gen::<usize>() % ELIM_SIZE
14+
(rand::rng().random::<u64>() as usize) % ELIM_SIZE
1515
}
1616

1717
/// Concurrent stack types.

homework/src/hash_table/growable_array.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,25 +135,25 @@ const SEGMENT_LOGSIZE: usize = 10;
135135

136136
/// A fixed size array of atomic pointers to other `Segment<T>` or `T`.
137137
///
138-
/// Each segment is either a child segment with pointers to `Segment<T>` or an element segment with
139-
/// pointers to `T`. This is determined by the height of this segment in the main array, which one
140-
/// needs to track separately. For example, use the main array root's tag.
138+
/// Each segment is either an inner segment with pointers to other, children `Segment<T>` or an
139+
/// element segment with pointers to `T`. This is determined by the height of this segment in the
140+
/// main array, which one needs to track separately. For example, use the main array root's tag.
141141
///
142-
/// Since destructing segments requires its height information, it is not recommended to
143-
/// implement [`Drop`]. Rather, implement and use the custom [`Segment::deallocate`] method that
144-
/// accounts for the height of the segment.
142+
/// Since destructing segments requires its height information, it is not recommended to implement
143+
/// [`Drop`]. Rather, implement and use the custom [`Segment::deallocate`] method that accounts for
144+
/// the height of the segment.
145145
union Segment<T> {
146146
children: ManuallyDrop<[Atomic<Segment<T>>; 1 << SEGMENT_LOGSIZE]>,
147147
elements: ManuallyDrop<[Atomic<T>; 1 << SEGMENT_LOGSIZE]>,
148148
}
149149

150150
impl<T> Segment<T> {
151151
/// Create a new segment filled with null pointers. It is up to the callee to whether to use
152-
/// this as a children or an element segment.
152+
/// this as an intermediate or an element segment.
153153
fn new() -> Owned<Self> {
154154
Owned::new(
155-
// SAFETY: An array of null pointers can be interperted as either an element segment or
156-
// a children segment.
155+
// SAFETY: An array of null pointers can be interperted as either an intermediate
156+
// segment or an element segment.
157157
unsafe { mem::zeroed() },
158158
)
159159
}
@@ -162,7 +162,8 @@ impl<T> Segment<T> {
162162
///
163163
/// # Safety
164164
///
165-
/// `self` must actually have height `height`.
165+
/// - `self` must actually have height `height`.
166+
/// - There should be no other references to possible children segments.
166167
unsafe fn deallocate(self, height: usize) {
167168
todo!()
168169
}
@@ -197,7 +198,7 @@ impl<T> GrowableArray<T> {
197198

198199
/// Returns the reference to the `Atomic` pointer at `index`. Allocates new segments if
199200
/// necessary.
200-
pub fn get<'g>(&self, mut index: usize, guard: &'g Guard) -> &'g Atomic<T> {
201+
pub fn get<'g>(&self, index: usize, guard: &'g Guard) -> &'g Atomic<T> {
201202
todo!()
202203
}
203204
}

homework/src/list_set/optimistic_fine_grained.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub struct OptimisticFineGrainedListSet<T> {
2020
}
2121

2222
unsafe impl<T: Send> Send for OptimisticFineGrainedListSet<T> {}
23-
unsafe impl<T: Send> Sync for OptimisticFineGrainedListSet<T> {}
23+
unsafe impl<T: Sync> Sync for OptimisticFineGrainedListSet<T> {}
2424

2525
#[derive(Debug)]
2626
struct Cursor<'g, T> {

homework/src/test/adt/map.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub fn stress_sequential<
3636
Ops::DeleteNone,
3737
];
3838

39-
let mut rng = thread_rng();
39+
let mut rng = rand::rng();
4040
let map = M::default();
4141
let mut hashmap = HashMap::new();
4242

@@ -118,7 +118,7 @@ pub fn lookup_concurrent<
118118
}
119119
const OPS: [Ops; 2] = [Ops::LookupSome, Ops::LookupNone];
120120

121-
let mut rng = thread_rng();
121+
let mut rng = rand::rng();
122122
let map = M::default();
123123
let mut hashmap = HashMap::new();
124124

@@ -133,7 +133,7 @@ pub fn lookup_concurrent<
133133
let mut handles = Vec::new();
134134
for _ in 0..threads {
135135
let handle = s.spawn(|| {
136-
let mut rng = thread_rng();
136+
let mut rng = rand::rng();
137137
for _ in 0..steps {
138138
let op = OPS.choose(&mut rng).unwrap();
139139

@@ -164,7 +164,7 @@ pub fn insert_concurrent<
164164
let mut handles = Vec::new();
165165
for _ in 0..threads {
166166
let handle = s.spawn(|| {
167-
let mut rng = thread_rng();
167+
let mut rng = rand::rng();
168168
for _ in 0..steps {
169169
let key = K::rand_gen(&mut rng);
170170
let value = V::rand_gen(&mut rng);
@@ -218,7 +218,7 @@ pub fn stress_concurrent<
218218
let mut handles = Vec::new();
219219
for _ in 0..threads {
220220
let handle = s.spawn(|| {
221-
let mut rng = thread_rng();
221+
let mut rng = rand::rng();
222222
for _ in 0..steps {
223223
let op = OPS.choose(&mut rng).unwrap();
224224
let key = K::rand_gen(&mut rng);
@@ -303,7 +303,7 @@ pub fn log_concurrent<
303303

304304
for _ in 0..threads {
305305
let handle = s.spawn(|| {
306-
let mut rng = thread_rng();
306+
let mut rng = rand::rng();
307307
let mut logs = Vec::new();
308308

309309
for _ in 0..steps {

homework/src/test/rand.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Utilities for random value generator
22
33
use rand::Rng;
4-
use rand::distributions::Alphanumeric;
4+
use rand::distr::Alphanumeric;
55
use rand::rngs::ThreadRng;
66

77
/// Types that has random generator
@@ -14,7 +14,7 @@ const KEY_MAX_LENGTH: usize = 4;
1414

1515
impl RandGen for String {
1616
fn rand_gen(rng: &mut ThreadRng) -> Self {
17-
let length = rng.r#gen::<usize>() % KEY_MAX_LENGTH;
17+
let length = (rng.random::<u64>() as usize) % KEY_MAX_LENGTH;
1818
rng.sample_iter(&Alphanumeric)
1919
.take(length)
2020
.map(|x| x as char)
@@ -26,21 +26,21 @@ impl RandGen for usize {
2626
/// pick only 16 bits, MSB=0
2727
fn rand_gen(rng: &mut ThreadRng) -> Self {
2828
const MASK: usize = 0x4004004004007777usize;
29-
rng.r#gen::<usize>() & MASK
29+
(rng.random::<u64>() as usize) & MASK
3030
}
3131
}
3232

3333
impl RandGen for u32 {
3434
/// pick only 16 bits
3535
fn rand_gen(rng: &mut ThreadRng) -> Self {
3636
const MASK: u32 = 0x66666666u32;
37-
rng.r#gen::<u32>() & MASK
37+
rng.random::<u32>() & MASK
3838
}
3939
}
4040

4141
impl RandGen for u8 {
4242
fn rand_gen(rng: &mut ThreadRng) -> Self {
43-
rng.r#gen::<u8>()
43+
rng.random::<u8>()
4444
}
4545
}
4646

homework/tests/list_set/fine_grained.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,24 @@ fn iter_consistent() {
5757

5858
let done = AtomicBool::new(false);
5959
thread::scope(|s| {
60+
// Ensure handles lives to the end.
61+
let mut handles = Vec::with_capacity(THREADS + 1);
6062
// insert or remove odd numbers
6163
for _ in 0..THREADS {
62-
let _ = s.spawn(|| {
63-
let mut rng = thread_rng();
64+
handles.push(s.spawn(|| {
65+
let mut rng = rand::rng();
6466
for _ in 0..STEPS {
65-
let key = 2 * rng.gen_range(0..50) + 1;
66-
if rng.r#gen() {
67+
let key = 2 * rng.random_range(0..50) + 1;
68+
if rng.random() {
6769
set.insert(key);
6870
} else {
6971
set.remove(&key);
7072
}
7173
}
7274
done.store(true, Release);
73-
});
75+
}));
7476
}
75-
let _ = s.spawn(|| {
77+
handles.push(s.spawn(|| {
7678
while !done.load(Acquire) {
7779
let snapshot = set.iter().copied().collect::<Vec<_>>();
7880
// sorted
@@ -81,6 +83,6 @@ fn iter_consistent() {
8183
let snapshot = snapshot.into_iter().collect::<HashSet<_>>();
8284
assert!(evens.is_subset(&snapshot));
8385
}
84-
});
86+
}));
8587
});
8688
}

homework/tests/list_set/optimistic_fine_grained.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,23 +120,26 @@ fn iter_consistent() {
120120

121121
let done = AtomicBool::new(false);
122122
thread::scope(|s| {
123+
// Ensure handles lives to the end.
124+
let mut handles = Vec::with_capacity(THREADS + 1);
123125
// Inserts or removes odd numbers.
124126
for _ in 0..THREADS {
125-
let _ = s.spawn(|| {
126-
let mut rng = thread_rng();
127+
handles.push(s.spawn(|| {
128+
let mut rng = rand::rng();
127129
for _ in 0..STEPS {
128-
let key = 2 * rng.gen_range(0..50) + 1;
129-
if rng.r#gen() {
130+
let key = 2 * rng.random_range(0..50) + 1;
131+
if rng.random() {
130132
let _ = set.insert(key);
131133
} else {
132134
let _ = set.remove(&key);
133135
}
134136
}
137+
// TODO: Ideally, should be per-thread variable?
135138
done.store(true, Release);
136-
});
139+
}));
137140
}
138141
// Checks iterator consistency.
139-
let _ = s.spawn(|| {
142+
handles.push(s.spawn(|| {
140143
while !done.load(Acquire) {
141144
let mut snapshot = Vec::new();
142145
for r in set.iter(&pin()) {
@@ -157,6 +160,6 @@ fn iter_consistent() {
157160
let snapshot = snapshot.into_iter().collect::<HashSet<_>>();
158161
assert!(evens.is_subset(&snapshot));
159162
}
160-
});
163+
}));
161164
});
162165
}

0 commit comments

Comments
 (0)