File tree 1 file changed +12
-7
lines changed
1 file changed +12
-7
lines changed Original file line number Diff line number Diff line change @@ -12,26 +12,31 @@ mod imp {
12
12
#[ cfg( any( target_arch = "arm" , target_arch = "mips" , target_arch = "powerpc" ) ) ]
13
13
mod imp {
14
14
use std:: sync:: atomic:: Ordering ;
15
+ use std:: sync:: Mutex ;
15
16
16
- use crossbeam_utils:: atomic:: AtomicCell ;
17
-
18
- pub ( crate ) struct AtomicU64 ( AtomicCell < u64 > ) ;
17
+ pub ( crate ) struct AtomicU64 ( Mutex < u64 > ) ;
19
18
20
19
impl AtomicU64 {
21
20
pub ( crate ) const fn new ( val : u64 ) -> Self {
22
- Self ( AtomicCell :: new ( val) )
21
+ Self ( Mutex :: new ( val) )
23
22
}
24
23
25
24
pub ( crate ) fn load ( & self , _: Ordering ) -> u64 {
26
- self . 0 . load ( )
25
+ * self . 0 . lock ( ) . unwrap ( )
27
26
}
28
27
29
28
pub ( crate ) fn fetch_add ( & self , val : u64 , _: Ordering ) -> u64 {
30
- self . 0 . fetch_add ( val)
29
+ let lock = self . 0 . lock ( ) . unwrap ( ) ;
30
+ let prev = * lock;
31
+ * lock += val;
32
+ prev
31
33
}
32
34
33
35
pub ( crate ) fn fetch_sub ( & self , val : u64 , _: Ordering ) -> u64 {
34
- self . 0 . fetch_sub ( val)
36
+ let lock = self . 0 . lock ( ) . unwrap ( ) ;
37
+ let prev = * lock;
38
+ * lock -= val;
39
+ prev
35
40
}
36
41
}
37
42
}
You can’t perform that action at this time.
0 commit comments