123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- //+build darwin
- //+private
- package sync2
- 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)
- }
|