我正在执行一个演示竞争条件的程序。 如果操作系统是主启动或双启动,它可以正常工作。 但是在虚拟机上,它无法证明竞争条件。
虚拟机:Oracle虚拟机 操作系统:红帽
代码是肯定的。但是对于虚拟机(OS-> red hat),它不起作用。它只打印第一个进程(子进程),然后是第二进程(父进程)。
以下是代码:
#include<stdio.h>
#include<stdlib.h>
#include<error.h>
static void charatatime(char *);
int main(void)
{
pid_t pid;
if((pid=fork())<0)
{
printf("fork error\n");
}
else if(pid==0)
charatatime("output from child\n");
else
charatatime("output from parent\n");
exit(0);
}
static void charatatime(char *str)
{
char *ptr;
int c;
setbuf(stdout,NULL);
for(ptr=str;(c=*ptr++)!=0;)
putc(c,stdout);
}
这背后可能是什么原因?