分析进程争用临界资源的现象,学习解决进程互斥的方法。
Linux****进程控制 lockf()
利用系统调用lockf(fd,mode,size),对指定区域(有size指示)进行加锁或解锁,以实现进程的同步或互斥。其中,fd是文件描述字;mode是锁定方式,mode=1表示加锁,mode=0表示解锁;size是指定文件fd的指定区域,用0表示从当前位置到文件结尾(注:有些Linux系统是locking(fd,mode,size))
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
int pid1, pid2, i;
lockf(1,1,0);
printf("\n\ni‘m father\n");
while ((pid1 = fork()) == -1);
if(pid1 == 0)
{
? lockf(1,1,0);
? printf("\n\ni‘m son\n");
? for (i = 0; i < 99; i++)
? printf(" %d", i);
? lockf(1,0,0);
? return 1;
}
while ((pid2 = fork()) == -1);
if(pid2 == 0)
{
? lockf(1,1,0);
? printf("\n\ni‘m daughter\n");
? for (i = 0; i < 99; i++)
? printf(" %d", i);
? lockf(1,0,0);
? return 2;
}
printf("\n");
return 0;
}
首先是在父进程中创建了一个子进程,子进程需要输出文本信息,并且在输出语句执行之前,将标准输出设备锁住,在输出语句执行之后,将标准输出设备解锁。同样,父进程也是要输出文本信息,对标准输出的操作同子进程。这样做能够防止父进程和子进程竞争标准输出(屏幕)资源,即如果父进程正在进行屏幕打印操作,则子进程将无法获得屏幕。
原文:https://www.cnblogs.com/domy/p/14191115.html