思维导图
练习题
1.使用信号灯集完成三个进程的同步,A进程输出字符A,B进程输出字符B,C进程输出字符C,要求输出结果为ABCABCABCABCABC...
#include <myhead.h>
#include "sem.h"
void printA(int semid)
{
while (1)
{
P(semid, 0);
printf("A");
fflush(stdout);
V(semid, 1);
}
}
void printB(int semid)
{
while (1)
{
P(semid, 1);
printf("B");
fflush(stdout);
V(semid, 2);
}
}
void printC(int semid)
{
while (1)
{
P(semid, 2);
printf("C");
fflush(stdout);
V(semid, 0);
}
}
int main(int argc, char const *argv[])
{
//创建3个信号灯
int semid = create_sems(3);
//定义3个进程pid
pid_t pidA, pidB, pidC;
pidA = fork();
if (pidA == 0)
{
printA(semid);
exit(0);
}
pidB = fork();
if (pidB == 0)
{
printB(semid);
exit(0);
}
pidC = fork();
if (pidC == 0)
{
printC(semid);
exit(0);
}
//回收子进程资源
wait(NULL);
wait(NULL);
wait(NULL);
//删除信号灯集
delete_sems(semid);
return 0;
}