#include<stdlib.h>
#include<stdio.h>
int main()
{
int p1 ,p2,i; //定义三个整形变量 p1,p2,i
while((p1=fork())==-1); //p1=fork(),fork()是一个函数返回值为整形,如果p1=-1就循环(代码这里应是个错
误,while应该有循环体,这里没有循环体就会执行下一步)
if(!p1) //如果p1不为0 执行{}
{
for(i=0;i<5;i++) //循环5次
{
printf("child %d\n",i); //输出child i值
sleep(1); //暂停1微妙
}
exit(0); //退出
}
else //否则(p1=0)
{
while((p2=fork())==-1); //p1=fork(),fork()是一个函数返回值为整形,如果p1=-1就循环,和上边类似
if(!p2) //如果P2不等于0执行{}
{
for(i=0;i<5;i++) //循环5次
{
printf("son %d\n",i); //输出 son i值i=0,1,2,3,4
sleep(1); //暂停1微妙
}
exit(0); //退出
}
for(i=0;i<5;i++) //循环5次
{
printf("parent %d\n",i); //输出parent i值 i=0,1,2,3,4
sleep(1); //暂停1微妙
}
exit(0);//退出
}
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
int p1 ,p2,i; //定义三个整形变量 p1,p2,i
while ((p1=fork())==-1);//p1=fork(),fork()是一个函数返回值为整形,如果p1=-1就执行循环(这里没有{}循
//环体会直接计入下一步)
if(!p1) //如果p1不为0 执行{}
{
lockf(1,1,0); //lockf()应是一个自定义函数,该函数有三个参数分别而给这三个参数赋值1,1,0
for(i=0;i<5;i++) //5次循环
{
printf("child %d\n",i); //输出child i值i=0,1,2,3,4
sleep(1); //暂停1微妙
}
lockf(1,0,0); //lockf()应是一个自定义函数,该函数有三个参数分别而给这三个参数赋值1,1,0
exit(0); //输入0退出
}
else 如果p1为0 执行{}
{
while((p2=fork())==-1); //p2=fork(),fork()是一个函数返回值为整形,如果p2=-1就执行循环(这里没有{}循
//环体会直接计入下一步)
if(!p2) //如果P2不为0
{
lockf(1,0,0); //lockf()应是一个自定义函数,该函数有三个参数分别而给这三个参数赋值1,1,0
exit(0); //输入0退出
}
wait(0); //异步等待,直到返回结果
wait(0);
lockf(1,0,0);//lockf()应是一个自定义函数,该函数有三个参数分别而给这三个参数赋值1,1,0
for(i=0;i<5;i++) //循环5次
{
printf("parent %d\n",i); //输出parent i值 i=0,1,2,3,4
sleep(1); //暂停1微妙
}
lockf(1,0,0);//现在看来这个函数可能是用来控制线程的锁
exit(0); //输入0退出
}
}
示例一
主线程创建二个子线程,三个线程交替进行混乱输出(输出次数大于五)
示例二 加入了文件锁
主线程创建二个子线程,三个线程交替进行五次输出
#include<stdlib.h>
#include<stdio.h>
int main()
{
int p1 ,p2,i;
while((p1=fork())==-1);// 先得到函数fork()的值赋给 p1,如果p1==-1,什么也不做继续空循环;
// 如果 p1 != -1, 结束while循环往下执行;
if(!p1)// 如果 p1 == 0
{
for(i=0;i<5;i++)
{// 输出 child 0 到 child 4
printf("child %d\n",i);// 输出
sleep(1);// 暂停 1 毫秒;
}
exit(0);// 结束程序
}
else// // 如果 p1 != 0
{
while((p2=fork())==-1);// 先得到函数fork()的值赋给 p2,如果p2==-1,什么也不做继续空循环;
// 如果 p2 != -1, 结束while循环往下执行;
if(!p2)// 如果 p2 == 0
{
for(i=0;i<5;i++)
{
printf("son %d\n",i);// 输出
sleep(1);// 暂停 1 毫秒;
}
exit(0);// 结束程序
}
for(i=0;i<5;i++)
{
printf("parent %d\n",i);
sleep(1);// 暂停 1 毫秒;
}
exit(0);// 结束程序
}
}
#include<stdio.h>
#include<stdlib.h>
int main()
{
int p1 ,p2,i;
while ((p1=fork())==-1);// 先得到函数fork()的值赋给 p1,如果p1==-1,什么也不做继续空循环;
// 如果 p1 != -1, 结束while循环往下执行;
if(!p1)
{
lockf(1,1,0);// 调用 lockf 函数;
for(i=0;i<5;i++)
{
printf("child %d\n",i);
sleep(1);
}
lockf(1,0,0);
exit(0);
}
else
{
while((p2=fork())==-1);
if(!p2)
{
lockf(1,0,0);
exit(0);
}
wait(0);
wait(0);
lockf(1,0,0);
for(i=0;i<5;i++)
{
printf("parent %d\n",i);
sleep(1);
}
lockf(1,0,0);
exit(0);
}
}