#pragma once #include "kthread.h" struct wait_queue { struct kthread *thread; struct wait_queue *next; struct wait_queue *prev; }; int wait(struct wait_queue *); int wake_up(struct wait_queue *); #define wait_event(wq, condition) \ do { \ if (condition) \ break; \ wait(wq); \ } while (1) struct semaphore { int count; struct wait_queue *wait; }; struct mutex { struct kthread *owner; struct wait_queue *wait; };