Я запускаю высокопоточное приложение (более 500 потоков).Мне нужно отследить некоторые данные от них, и для этого я печатал из потока.Выход только обрезан кажется.Я также часто очищал стандартный вывод и пытался использовать мьютекс для координации вывода.Ни одно из этих решений не сработало.
Это тема, о которой идет речь:
void* troutine(void* tmp) {
a = RDTSC();
chance = Park(state);
b = RDTSC();
printf("%s.%i.%c : %lli\n", IMPLEMENTATION, *(int*)tmp, 'T', b-a);
usleep(RAND(50));
a = RDTSC();
Leave(chance, state);
b = RDTSC();
printf("%s.%i.%c : %lli\n", IMPLEMENTATION, *(int*)tmp, 'T', b-a);
fflush(stdout);
pthread_exit(NULL);
}
На самом деле печатается только половина операторов print, что является проблемой.Мне нужно убедиться, что все они печатаются, порядок не имеет значения, и ни один из выходных данных не переплетен.
РЕДАКТИРОВАТЬ main.c
for(i = 0; i < 4000; i++)
while(!pthread_create(&tmp, NULL, &troutine, (void*)&testNum));
Цикл while таков, что я гарантирую создание потоков 4k, так как иногда pthread_create завершается ошибкой с таким количеством активных потоков.Кроме того, даже когда я только устанавливаю цикл, чтобы сделать <4 потока, я все равно получаю ~ 300 строк вывода (в отличие от 8).</p>