#include <sys.h>
semaphore mutex=1;
int x;
void process_one()
{
int y,z;
P(mutex);
x=1;
y=0;
if(x>=1)
y=y+1;
z=y;
V(mutex);
return(z);
}
void process_two()
{
int y,z;
P(mutex);
x=0;
y=0;
if(x<=1)
y=y+2;
z=y;
V(mutex);
return(z);
}
#include <xinu.h>
void produce(sid32,sid32),consume(sid32,sid32);
int32 n = 0;
void main(void)
{
sid32 prodeced,consumed;
consumed = semcreate(0);
prodeced = semcreate(1);
resume(create(consume,1024,20,"cons",2,consumed,prodeced));
resume(create(produce,1024,20,"prod",2,consumed,prodeced));
}
void produce(sid32 consumed,sid32 prodeced)
{
int32 i;
for(i=1;i<=2000;i++)
{
wait(consumed);
n++;
signal(prodeced);
}
}
void consume(sid32 consumed,sid32 prodeced)
{
int32 i;
for(i=1;i<=2000;i++)
{
wait(prodeced);
printf("n = %d\n",n);
signal(consumed);
}
}