mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-28 13:18:22 +00:00
kernel: semaphores
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
#ifndef _SEMAPHORE_H
|
||||
#define _SEMAPHORE_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <spinlock.h>
|
||||
#include <kernel/scheduler.h>
|
||||
|
||||
#define SEM_TAIL 0
|
||||
#define SEM_HEAD 1
|
||||
|
||||
typedef struct {
|
||||
int i;
|
||||
spinlock_t lock;
|
||||
thread_t *tail;
|
||||
thread_t *head;
|
||||
} semaphore_t;
|
||||
|
||||
#define SEMAPHORE_INIT(x, v) { \
|
||||
(x)->val = v; \
|
||||
SPINLOCK_INIT((x)->lock); \
|
||||
(x)->list = NULL; \
|
||||
}
|
||||
|
||||
int semaphore_wait(semaphore_t *sem, bool interruptible);
|
||||
void semaphore_signal(semaphore_t *sem);
|
||||
bool semaphore_test(semaphore_t *sem);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user