信号灯集。
2023-12-13 09:02:08
ABCABCABC
#include <myhead.h>
#include "sem.h"
int main(int argc, const char *argv[])
{
//创建3个灯组成的信号灯集
int semid=creat_sem(3);
//创建进程1
pid_t pid1=-1;
pid1=fork();
if(pid1==0)
{
//循环五次
int n=5;
while(n--)
{
//申请2号灯的资源
P(semid,2);
printf("A");
//刷新缓冲区
fflush(stdout);
//释放0号灯的资源
V(semid,0);
}
//退出子进程1
exit(0);
}
else if(pid1>0)
{
pid_t pid2=-1;
pid2=fork();
if(pid2==0)
{
int n=5;
while(n--)
{
P(semid,0);
printf("B");
fflush(stdout);
V(semid,1);
}
exit(0);
}
if(pid2>0)
{
int n=5;
while(n--)
{
P(semid,1);
printf("C\n");
sleep(1);
V(semid,2);
}
//阻塞等待回收子进程资源
wait(NULL);
wait(NULL);
puts("结束");
//删除信号灯集
del_sem(semid);
}
}
return 0;
}
文章来源:https://blog.csdn.net/m0_64059184/article/details/134956346
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!