如以下代码所示, 我使用fork函数创建一个子进程,删除stdout的缓冲区,并创建竞争条件环境, 但是这两个过程没有竞争。
系统:Linux user1-ubuntu64 4.18.0-20-generic 编译器:gcc版本7.4.0(Ubuntu 7.4.0-1ubuntu1〜18.04) 编译命令:gcc -o test test.c
如果给父进程一个很小的延迟(250ns),我想要的工作。
源代码:
#include <stdio.h>
#include <sys/types.h>
static void printatime(char *);
int main(void)
{
pid_t pid;
if ((pid = fork()) < 0)
{
perror("fork error");
return -1;
}
else if (pid == 0)
{
printatime("AAAAAAAAAAAA");
}
else
{
printatime("BBBBBBBBBBBB");
}
return 0;
}
static void printatime(char *str)
{
char *ptr = str;
setbuf(stdout, NULL);
while (*ptr)
{
putc(*ptr++, stdout);
}
}
预期结果:
user@ubuntu64:~/C$ BAABBABABAABBAAABBABABAB
实际结果:
BBBBBBBBBBBBuser@ubuntu64:~/C$ AAAAAAAAAAAA