Skip to content

Commit 382f991

Browse files
authored
Merge pull request #7 from taiki-e/compare_and_swap
Replace deprecated compare_and_swap with compare_exchange
2 parents 21dc7a1 + 875dc41 commit 382f991

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

src/mutex.rs

+25-5
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,11 @@ impl<T: ?Sized> Mutex<T> {
117117
let listener = self.lock_ops.listen();
118118

119119
// Try locking if nobody is being starved.
120-
match self.state.compare_and_swap(0, 1, Ordering::Acquire) {
120+
match self
121+
.state
122+
.compare_exchange(0, 1, Ordering::Acquire, Ordering::Acquire)
123+
.unwrap_or_else(|x| x)
124+
{
121125
// Lock acquired!
122126
0 => return,
123127

@@ -132,7 +136,11 @@ impl<T: ?Sized> Mutex<T> {
132136
listener.await;
133137

134138
// Try locking if nobody is being starved.
135-
match self.state.compare_and_swap(0, 1, Ordering::Acquire) {
139+
match self
140+
.state
141+
.compare_exchange(0, 1, Ordering::Acquire, Ordering::Acquire)
142+
.unwrap_or_else(|x| x)
143+
{
136144
// Lock acquired!
137145
0 => return,
138146

@@ -171,7 +179,11 @@ impl<T: ?Sized> Mutex<T> {
171179
let listener = self.lock_ops.listen();
172180

173181
// Try locking if nobody else is being starved.
174-
match self.state.compare_and_swap(2, 2 | 1, Ordering::Acquire) {
182+
match self
183+
.state
184+
.compare_exchange(2, 2 | 1, Ordering::Acquire, Ordering::Acquire)
185+
.unwrap_or_else(|x| x)
186+
{
175187
// Lock acquired!
176188
2 => return,
177189

@@ -213,7 +225,11 @@ impl<T: ?Sized> Mutex<T> {
213225
/// ```
214226
#[inline]
215227
pub fn try_lock(&self) -> Option<MutexGuard<'_, T>> {
216-
if self.state.compare_and_swap(0, 1, Ordering::Acquire) == 0 {
228+
if self
229+
.state
230+
.compare_exchange(0, 1, Ordering::Acquire, Ordering::Acquire)
231+
.is_ok()
232+
{
217233
Some(MutexGuard(self))
218234
} else {
219235
None
@@ -286,7 +302,11 @@ impl<T: ?Sized> Mutex<T> {
286302
/// ```
287303
#[inline]
288304
pub fn try_lock_arc(self: &Arc<Self>) -> Option<MutexGuardArc<T>> {
289-
if self.state.compare_and_swap(0, 1, Ordering::Acquire) == 0 {
305+
if self
306+
.state
307+
.compare_exchange(0, 1, Ordering::Acquire, Ordering::Acquire)
308+
.is_ok()
309+
{
290310
Some(MutexGuardArc(self.clone()))
291311
} else {
292312
None

src/rwlock.rs

+7-3
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,11 @@ impl<T: ?Sized> RwLock<T> {
342342
let lock = self.mutex.try_lock()?;
343343

344344
// If there are no readers, grab the write lock.
345-
if self.state.compare_and_swap(0, WRITER_BIT, Ordering::AcqRel) == 0 {
345+
if self
346+
.state
347+
.compare_exchange(0, WRITER_BIT, Ordering::AcqRel, Ordering::Acquire)
348+
.is_ok()
349+
{
346350
Some(RwLockWriteGuard {
347351
writer: RwLockWriteGuardInner(self),
348352
reserved: lock,
@@ -555,8 +559,8 @@ impl<'a, T: ?Sized> RwLockUpgradableReadGuard<'a, T> {
555559
.reader
556560
.0
557561
.state
558-
.compare_and_swap(ONE_READER, WRITER_BIT, Ordering::AcqRel)
559-
== ONE_READER
562+
.compare_exchange(ONE_READER, WRITER_BIT, Ordering::AcqRel, Ordering::Acquire)
563+
.is_ok()
560564
{
561565
Ok(guard.into_writer())
562566
} else {

0 commit comments

Comments
 (0)