Fix _Sema

This commit is contained in:
gingerBill
2022-04-01 14:51:51 +01:00
parent 76cf667a29
commit c78b83f142
3 changed files with 6 additions and 6 deletions
+2 -2
View File
@@ -202,7 +202,7 @@ benaphore_lock :: proc(b: ^Benaphore) {
} }
benaphore_try_lock :: proc(b: ^Benaphore) -> bool { benaphore_try_lock :: proc(b: ^Benaphore) -> bool {
v, _ := atomic_compare_exchange_strong_explicit(&b.counter, 1, 0, .Acquire, .Acquire) v, _ := atomic_compare_exchange_strong_explicit(&b.counter, 0, 1, .Acquire, .Acquire)
return v == 0 return v == 0
} }
@@ -243,7 +243,7 @@ recursive_benaphore_try_lock :: proc(b: ^Recursive_Benaphore) -> bool {
atomic_add_explicit(&b.counter, 1, .Acquire) atomic_add_explicit(&b.counter, 1, .Acquire)
} }
if v, _ := atomic_compare_exchange_strong_explicit(&b.counter, 1, 0, .Acquire, .Acquire); v != 0 { if v, _ := atomic_compare_exchange_strong_explicit(&b.counter, 0, 1, .Acquire, .Acquire); v != 0 {
return false return false
} }
// inside the lock // inside the lock
+2 -2
View File
@@ -10,7 +10,7 @@ when #config(ODIN_SYNC_RECURSIVE_MUTEX_USE_FUTEX, true) {
_recursive_mutex_lock :: proc(m: ^Recursive_Mutex) { _recursive_mutex_lock :: proc(m: ^Recursive_Mutex) {
tid := Futex(current_thread_id()) tid := Futex(current_thread_id())
for { for {
prev_owner := atomic_compare_exchange_strong_explicit(&m.impl.owner, tid, 0, .Acquire, .Acquire) prev_owner := atomic_compare_exchange_strong_explicit(&m.impl.owner, 0, tid, .Acquire, .Acquire)
switch prev_owner { switch prev_owner {
case 0, tid: case 0, tid:
m.impl.recursion += 1 m.impl.recursion += 1
@@ -36,7 +36,7 @@ when #config(ODIN_SYNC_RECURSIVE_MUTEX_USE_FUTEX, true) {
_recursive_mutex_try_lock :: proc(m: ^Recursive_Mutex) -> bool { _recursive_mutex_try_lock :: proc(m: ^Recursive_Mutex) -> bool {
tid := Futex(current_thread_id()) tid := Futex(current_thread_id())
prev_owner := atomic_compare_exchange_strong_explicit(&m.impl.owner, tid, 0, .Acquire, .Acquire) prev_owner := atomic_compare_exchange_strong_explicit(&m.impl.owner, 0, tid, .Acquire, .Acquire)
switch prev_owner { switch prev_owner {
case 0, tid: case 0, tid:
m.impl.recursion += 1 m.impl.recursion += 1
+2 -2
View File
@@ -25,7 +25,7 @@ when #config(ODIN_SYNC_SEMA_USE_FUTEX, true) {
futex_wait(&s.impl.count, u32(original_count)) futex_wait(&s.impl.count, u32(original_count))
original_count = s.impl.count original_count = s.impl.count
} }
if original_count == atomic_compare_exchange_strong(&s.impl.count, original_count-1, original_count) { if original_count == atomic_compare_exchange_strong(&s.impl.count, original_count, original_count-1) {
return return
} }
} }
@@ -49,7 +49,7 @@ when #config(ODIN_SYNC_SEMA_USE_FUTEX, true) {
} }
original_count = s.impl.count original_count = s.impl.count
} }
if original_count == atomic_compare_exchange_strong(&s.impl.count, original_count-1, original_count) { if original_count == atomic_compare_exchange_strong(&s.impl.count, original_count, original_count-1) {
return true return true
} }
} }