使用信号灯集让三个进程分别打印“A”,“B”,“C”。
#include <head.h>
#include "sem.h"
int main(int argc, const char *argv[])
{
int semid;
if((semid=init_sem())==-1)
{
printf("error\n");
return -1;
}
pid_t cpid=fork();
if(cpid>0)
{
pid_t pid=fork();
if(pid>0)
{
int a=5;
while(a--)
{
P(semid,1);
sleep(1);
fprintf(stderr,"C");
V(semid,2);
}
}
else if(pid==0)
{
int b=5;
while(b--)
{
P(semid,0);
sleep(1);
fprintf(stderr,"B");
V(semid,1);
}
exit(0);
}
else if(pid<0)
{
ERR_MSG("fork");
return -1;
}
}
else if(cpid==0)
{
int c=5;
while(c--)
{
P(semid,2);
sleep(1);
fprintf(stderr,"A");
V(semid,0);
}
exit(0);
}
else if(cpid<0)
{
ERR_MSG("fork");
return -1;
}
puts("");
sem_del(semid);
wait(NULL);
wait(NULL);
return 0;
}