Semaphore
Busy-waiting Semaphore
typedef struct {
int S;
}Semaphore;
void wait(Semaphore *semaphore){
while(semaphore->S <= 0); //Busy wait
semaphore->S--;
}
void signal(Semaphore *semaphore) {
semaphore->S++;
}
Blocking Semaphore
typedef struct {
int S;
struct task *Q;
}Semaphore;
void wait(Semaphore *semaphore){
semaphore->S--;
if(semaphore->S<0){
add_task(semaphore->Q);
block();
}
}
void signal(Semaphore *semaphore){
semaphore->S++;
if(semaphore->S<0){
struct task P = remove_task(semaphore->Q);
wakeup(P);
}
}
Type