pthread_openbsd.odin 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. //+build openbsd
  2. package unix
  3. import "core:c"
  4. pthread_t :: distinct rawptr
  5. pthread_attr_t :: distinct rawptr
  6. pthread_mutex_t :: distinct rawptr
  7. pthread_mutexattr_t :: distinct rawptr
  8. pthread_cond_t :: distinct rawptr
  9. pthread_condattr_t :: distinct rawptr
  10. pthread_rwlock_t :: distinct rawptr
  11. pthread_rwlockattr_t :: distinct rawptr
  12. pthread_barrier_t :: distinct rawptr
  13. pthread_barrierattr_t :: distinct rawptr
  14. pthread_spinlock_t :: distinct rawptr
  15. pthread_key_t :: distinct c.int
  16. pthread_once_t :: struct {
  17. state: c.int,
  18. mutex: pthread_mutex_t,
  19. }
  20. PTHREAD_MUTEX_ERRORCHECK :: 1
  21. PTHREAD_MUTEX_RECURSIVE :: 2
  22. PTHREAD_MUTEX_NORMAL :: 3
  23. PTHREAD_MUTEX_STRICT_NP :: 4
  24. PTHREAD_DETACHED :: 0x1
  25. PTHREAD_SCOPE_SYSTEM :: 0x2
  26. PTHREAD_INHERIT_SCHED :: 0x4
  27. PTHREAD_NOFLOAT :: 0x8
  28. PTHREAD_CREATE_DETACHED :: PTHREAD_DETACHED
  29. PTHREAD_CREATE_JOINABLE :: 0
  30. PTHREAD_SCOPE_PROCESS :: 0
  31. PTHREAD_EXPLICIT_SCHED :: 0
  32. SCHED_FIFO :: 1
  33. SCHED_OTHER :: 2
  34. SCHED_RR :: 3
  35. sched_param :: struct {
  36. sched_priority: c.int,
  37. }
  38. sem_t :: distinct rawptr
  39. PTHREAD_CANCEL_ENABLE :: 0
  40. PTHREAD_CANCEL_DISABLE :: 1
  41. PTHREAD_CANCEL_DEFERRED :: 0
  42. PTHREAD_CANCEL_ASYNCHRONOUS :: 2
  43. foreign import libc "system:c"
  44. @(default_calling_convention="c")
  45. foreign libc {
  46. sem_open :: proc(name: cstring, flags: c.int) -> ^sem_t ---
  47. sem_init :: proc(sem: ^sem_t, pshared: c.int, initial_value: c.uint) -> c.int ---
  48. sem_destroy :: proc(sem: ^sem_t) -> c.int ---
  49. sem_post :: proc(sem: ^sem_t) -> c.int ---
  50. sem_wait :: proc(sem: ^sem_t) -> c.int ---
  51. sem_trywait :: proc(sem: ^sem_t) -> c.int ---
  52. //sem_timedwait :: proc(sem: ^sem_t, timeout: time.TimeSpec) -> c.int ---
  53. // NOTE: unclear whether pthread_yield is well-supported on Linux systems,
  54. // see https://linux.die.net/man/3/pthread_yield
  55. pthread_yield :: proc() ---
  56. pthread_setcancelstate :: proc (state: c.int, old_state: ^c.int) -> c.int ---
  57. pthread_setcanceltype :: proc (type: c.int, old_type: ^c.int) -> c.int ---
  58. pthread_cancel :: proc (thread: pthread_t) -> c.int ---
  59. }