diff --git a/semaphore.c b/semaphore.c new file mode 100644 index 0000000..f6b885a --- /dev/null +++ b/semaphore.c @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Oleg Borodin + */ + +#include "semaphore.h" + +typedef struct { + int value; +} sem_t; + +int sem_init(sem_t* sem, int value) { + sem->value = value; +} + +int sem_wait(sem_t* sem) { + while(sem->value > 0); + sem->value--; +} + + +int sem_post(sem_t* sem) { + sem->value++; +} diff --git a/semaphore.h b/semaphore.h new file mode 100644 index 0000000..0cf2b8e --- /dev/null +++ b/semaphore.h @@ -0,0 +1,12 @@ +/* + * Copyright 2022 Oleg Borodin + */ + + +typedef struct { + int value; +} sem_t; + +int sem_init(sem_t* sem, int value); +int sem_wait(sem_t* sem); +int sem_post(sem_t* sem);