12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #pragma once
- #include <common/atomic.h>
- #include <common/wait_queue.h>
- typedef struct
- {
- atomic_t counter;
- wait_queue_node_t wait_queue;
- } semaphore_t;
- void __semaphore_invoke_sched();
- void __semaphore_sched_enqueue(struct process_control_block *pcb);
- static __always_inline void semaphore_init(semaphore_t *sema, ul count)
- {
- atomic_set(&sema->counter, count);
- wait_queue_init(&sema->wait_queue, NULL);
- }
- void semaphore_down(semaphore_t *sema);
- void semaphore_up(semaphore_t *sema);
|