gpt4 book ai didi

c - h 和 t 只打印了 1 次...为什么呢?

转载 作者:行者123 更新时间:2023-11-30 18:08:25 26 4
gpt4 key购买 nike

#include <stdio.h>
//#include <conio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/types.h>
int t_array[100];
int h_array[100];
int c,h_comp=0,race_length=0,o=0,i=0,Ti=0;

void cursor(int y)
{
int i;
printf("%c[%d;%df",0x1B,y,o);
}
void turtle_fun()
{
int Ti=0;
while(h_comp!=1&&Ti<=race_length-1)
{
cursor(10);
printf("t ");
fflush(stdout);
Ti++;
sleep(3);
}
}


void hare_fun(int rh[])
{
int k;int i=0;
char pos_h;
close(rh[0]);
while(c!=1&&i<=race_length-1)
{

cursor(5);
printf("h ");
fflush(stdout);
i++;
sleep(1);
}
h_comp=1;
}



void god_fun(pid_t id)
{

}


void report_fun(int rh[],int rg[],int rt[])
{
int k,m,pos;
int pos_h,pos_t;
close(rh[1]);
if(k=fork()==0)
hare_fun(rh);
else
{
if(fork()==0)
turtle_fun();

}

}


void main()
{
int rg[2],rh[2],rt[2],gh[2],gt[2],ht[2];
int child_id;
pid_t cpid;
printf("what is the length of the race");
scanf("%d",&race_length);
cpid=fork();
if(cpid==0)
{
pipe(rg);
pipe(rh);
pipe(rt);
report_fun(rh,rg,rt);
}
else
{
pipe(gh);
pipe(gt);
god_fun(cpid);
}

}

最佳答案

int c,h_comp=0,race_length=0,o=0,i=0,Ti=0;

在 fork() 之后,数据段也会被 fork ,并且变量将停止共享,这意味着:

void hare_fun(int rh[])
{
/*...*/
h_comp=1;
}

不会有任何影响

void turtle_fun()
{
while(h_comp!=1 /* ... */)
{
/* ... */
}
}

在不同的进程中运行。

获取由 fork()ed 进程共享的一 block 内存:

  • 将需要共享的所有字段放入一个结构中,例如结构 the_struct,
  • 添加一个新的全局变量 - 指向结构的指针,
  • main()< 的某处使用 mmap(0, sizeof(struct the_struct), PROT_READ|PTOT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0); 为结构体分配内存 位于任何 fork() 之前。
  • 以这种方式创建的内存将在 fork() 之后共享。

关于c - h 和 t 只打印了 1 次...为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com