#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include "tos.h"

// Массив из пяти семафоров

word semaphore[5];

// Процедура сброса семафора.
// Параметр sem - номер сбрасываемого семафора

void sem_clear(int sem) {
	asm cli
	semaphore[sem] = 0;
	asm sti
}

// Процедура установки семафора
// Параметр sem - номер устанавливаемого семафора

void sem_set(int sem) {
	asm cli
	semaphore[sem] = 1;
	asm sti
}

// Ожидание установки семафора
// Параметр sem - номер ожидаемого семафора

void sem_wait(int sem) {
	while(1) {
		asm cli
		if(semaphore[sem]) break; // проверяем семафор

		asm sti // ожидаем установки семафора
		asm nop
		asm nop
	}
	asm sti
}