Я пишу программу, использующую потоки в C++ в linux.многопоточный предел?
В настоящее время я просто храню массив потоков, и каждый раз, когда проходит одна секунда, я проверяю, какие из них закончены, и перезапустите их. Это плохо? Мне нужно, чтобы эта программа работала в течение длительного времени. Как и сейчас, я получаю код 11 после стольких циклов перезапуска потоков (100-й цикл в последнем испытании). Я решил, что повторное использование потоков и убедитесь, что у меня есть только небольшое количество из них, работающих в любой момент времени, что я бы не попал в лимит. Массив, который я использую, имеет размер 8 (разумеется, я не запускаю 8 каждый раз, только те, которые остановились).
Любые идеи?
Мой код ниже:
if (loop_times == 0 || pthread_kill(threads[t],0) != 0)
{
rc = pthread_create(&threads[t], NULL, thread_stall, (void *)NULL);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
thread_count++;
}
Переменная loop_times просто так, что я могу попасть в петлю и начать резьбе в первый раз. В противном случае я получаю SEGFAULT, потому что нити не были запущены раньше.
Кроме того, я хотел, чтобы увидеть значение PTHREAD_THREADS_MAX, но я не могу распечатать его (даже при включении limits.h)
Если ваша программа работает некоторое время, вы можете использовать ps -eLf, чтобы проверить, сколько потоков использует linux. – masebase
Если вы используете недавний компилятор, используйте C++ вместо pthreads. –
Это очень плохая практика, чтобы убивать темы. Пусть они закончат. Многие API потоковой передачи не дадут вам такой возможности, те, кто говорят, что это не очень хорошая идея. –