IMPLEMENTATION #1: (A program
that uses the primitives below)
wait primitive:
void P(int semaphore)
{
struct sembuf psembuf;
psembuf.sem_op = -1;
psembuf.sem_flg = 0;
psembuf.sem_num = semaphore;
semop(semkey,&psembuf,1);
return;
}
signal primitive:
void V(int semaphore)
{
struct sembuf vsembuf;
vsembuf.sem_op = 1;
vsembuf.sem_flg = 0;
vsembuf.sem_num = semaphore;
semop(semkey,&vsembuf,1);
return;
}
IMPLEMENTATION #2:
wait primitive:
int
semwait(int semid, ushort semnum)
{
static struct sembuf wait_buf = {0, -1, 0};
wait_buf.sem_num = semnum;
return semop(semid, &wait_buf, 1);
}
signal primitive:
int semsignal(int semid,
ushort semnum)
{
static struct
sembuf signal_buf = {0, 1, 0};
signal_buf.sem_num
= semnum;
return
semop(semid, &signal_buf, 1);
}