У меня есть код, который повторяет что-то подобное в цикле:
$ cat test.c
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
char arr[6] = {'h','e','l','l','o','!'};
for(int x=0; x<6 ; x++){
printf("%c",arr[x]);
usleep(1000000);
printf("%c",arr[x]);
usleep(1000000);
}
printf("\n");
return 0;
}
Я вижу, что printf()
выполняется один за другим БЕЗ какой-либо задержки (из-за usleep
),и затем программа спит в течение всего usleep
времени в конце перед следующей итерацией.Похоже, в конце концов все вызовы usleep()
происходят вместе.
Я пробовал флаг -O0
в gcc, потому что подозревал, что это влияет на оптимизацию компилятора.Но я предполагаю, что флаг -O0
не отключает какую-либо категорию оптимизации, к которой относится этот случай (если моя догадка верна о том, что причиной такого поведения является компилятор).
Я пытаюсь понять причину такого поведения и как добиться желаемого поведения в моей программе.
Примечание. Я знаю, что можно заменить usleep()
на некоторые вычислительныетяжелый вызов функции, который занимает эквивалентное количество времени, но это не решение, которое я ищу.