mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-04 04:02:33 +00:00
58 lines
1.2 KiB
Odin
58 lines
1.2 KiB
Odin
//+build darwin
|
|
//+private
|
|
package sync
|
|
|
|
import "core:c"
|
|
import "core:time"
|
|
import "core:intrinsics"
|
|
|
|
foreign import pthread "System.framework"
|
|
|
|
_current_thread_id :: proc "contextless" () -> int {
|
|
tid: u64
|
|
// NOTE(Oskar): available from OSX 10.6 and iOS 3.2.
|
|
// For older versions there is `syscall(SYS_thread_selfid)`, but not really
|
|
// the same thing apparently.
|
|
foreign pthread { pthread_threadid_np :: proc "c" (rawptr, ^u64) -> c.int --- }
|
|
pthread_threadid_np(nil, &tid)
|
|
return int(tid)
|
|
}
|
|
|
|
|
|
|
|
_Mutex :: struct {
|
|
mutex: Atomic_Mutex,
|
|
}
|
|
|
|
_mutex_lock :: proc(m: ^Mutex) {
|
|
atomic_mutex_lock(&m.impl.mutex)
|
|
}
|
|
|
|
_mutex_unlock :: proc(m: ^Mutex) {
|
|
atomic_mutex_unlock(&m.impl.mutex)
|
|
}
|
|
|
|
_mutex_try_lock :: proc(m: ^Mutex) -> bool {
|
|
return atomic_mutex_try_lock(&m.impl.mutex)
|
|
}
|
|
|
|
_Cond :: struct {
|
|
cond: Atomic_Cond,
|
|
}
|
|
|
|
_cond_wait :: proc(c: ^Cond, m: ^Mutex) {
|
|
atomic_cond_wait(&c.impl.cond, &m.impl.mutex)
|
|
}
|
|
|
|
_cond_wait_with_timeout :: proc(c: ^Cond, m: ^Mutex, duration: time.Duration) -> bool {
|
|
return atomic_cond_wait_with_timeout(&c.impl.cond, &m.impl.mutex, duration)
|
|
}
|
|
|
|
_cond_signal :: proc(c: ^Cond) {
|
|
atomic_cond_signal(&c.impl.cond)
|
|
}
|
|
|
|
_cond_broadcast :: proc(c: ^Cond) {
|
|
atomic_cond_broadcast(&c.impl.cond)
|
|
}
|