Как и в следующем коде, я создаю дочерний процесс с использованием функции fork, удаляю буфер stdout и создаю среду условий гонки, но два процесса не конкурируют.
Система: Linux user1-ubuntu64 4.18.0-20-generic Compiler: gcc версии 7.4.0 (Ubuntu 7.4.0-1ubuntu1 ~ 18.04) Команда компиляции: gcc -o test test.c
Если родительский процесс имеет очень небольшую задержку(250 нс), это работает, что я хочу.
Исходный код:
#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