1 2 #ifndef THREADING_SEMAPHORE_T 3 #define THREADING_SEMAPHORE_T 4 5 #include <threading/preempt.h> 6 #include <sys/compiler.h> 7 #include <sys/types.h> 8 9 typedef struct { 10 int value; /**< Value of the semaphore */ 11 u8_t waiters_num; /**< Number of waiters */ 12 int waiters[MAX_THREADS]; /**< Number of waiting threads */ 13 } sem_t; 14 15 #asm 16 DEFVARS 0 17 { 18 semaphore_value ds.w 1 19 semaphore_waiters_num ds.b 1 20 semaphore_waiters ds.w MAX_THREADS 21 } 22 #endasm 23 24 extern int __LIB__ sem_init(sem_t *sempahore, int shared, int value) __smallc; 25 extern int __LIB__ sem_wait(sem_t *semaphore); 26 extern int __LIB__ sem_post(sem_t *semaphore); 27 extern int __LIB__ sem_getvalue(sem_t *semaphore, int *value) __smallc; 28 extern int __LIB__ sem_destroy(sem_t *semaphore); 29 30 31 #endif 32