mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Fix _Sema
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user