1
1
use integration:: { key, new_value} ;
2
2
use skl:: * ;
3
- use std:: sync:: Arc ;
4
3
5
4
fn main ( ) {
6
5
let dir = tempfile:: tempdir ( ) . unwrap ( ) ;
@@ -13,15 +12,17 @@ fn main() {
13
12
. read ( true )
14
13
. write ( true ) ;
15
14
let mmap_options = MmapOptions :: default ( ) ;
16
- let l = Arc :: new ( SkipMap :: mmap_mut ( & p, open_options, mmap_options) . unwrap ( ) ) ;
15
+ let l = SkipMap :: mmap_mut ( & p, open_options, mmap_options) . unwrap ( ) ;
17
16
for i in 0 ..N {
18
17
let l = l. clone ( ) ;
19
18
std:: thread:: spawn ( move || {
20
19
l. insert ( 0 , & key ( i) , & new_value ( i) ) . unwrap ( ) ;
21
20
drop ( l) ;
22
21
} ) ;
23
22
}
24
- while Arc :: strong_count ( & l) > 1 { }
23
+ while l. refs ( ) > 1 {
24
+ core:: hint:: spin_loop ( ) ;
25
+ }
25
26
for i in 0 ..N {
26
27
let l = l. clone ( ) ;
27
28
std:: thread:: spawn ( move || {
@@ -30,15 +31,17 @@ fn main() {
30
31
drop ( l) ;
31
32
} ) ;
32
33
}
33
- while Arc :: strong_count ( & l) > 1 { }
34
+ while l. refs ( ) > 1 {
35
+ core:: hint:: spin_loop ( ) ;
36
+ }
34
37
}
35
38
36
39
{
37
40
const N2 : usize = 10 ;
38
41
39
42
let open_options = OpenOptions :: default ( ) . read ( true ) ;
40
43
let mmap_options = MmapOptions :: default ( ) ;
41
- let l = Arc :: new ( SkipMap :: < u64 > :: mmap ( & p, open_options, mmap_options) . unwrap ( ) ) ;
44
+ let l = SkipMap :: < u64 > :: mmap ( & p, open_options, mmap_options) . unwrap ( ) ;
42
45
assert_eq ! ( N2 , l. len( ) ) ;
43
46
for i in 0 ..N2 {
44
47
let l = l. clone ( ) ;
@@ -47,6 +50,8 @@ fn main() {
47
50
assert_eq ! ( l. get( 0 , & k) . unwrap( ) . value( ) , new_value( i) , "broken: {i}" ) ;
48
51
} ) ;
49
52
}
50
- while Arc :: strong_count ( & l) > 1 { }
53
+ while l. refs ( ) > 1 {
54
+ core:: hint:: spin_loop ( ) ;
55
+ }
51
56
}
52
57
}
0 commit comments