Некоторое время цикл infinte фактически перестает использовать потоки - PullRequest
0 голосов
/ 12 ноября 2019

Я новичок в C и пытаюсь учиться. Я пытаюсь реализовать многопоточность в моей программе, но у меня проблемы. Программа (и потоки) должны работать в бесконечном цикле, но на самом деле программы останавливаются через несколько секунд. Что я могу сделать, чтобы программа работала вечно? Я что-то не так делаю?

#include <stdio.h>
#include <pthread.h>


void *func(void *threadid){
    while (1)
    {
        /* do stuff, but the program terminates after that thread does few cycles */
    }
}

int main(){
    #define NUM_THREADS 800
    pthread_t threads[NUM_THREADS];
    int rc, i;
    for (i=0; i < NUM_THREADS; i++)
    {
        rc = pthread_create(&threads[i], NULL, func, (void *)i);
        if (rc)
        {
            printf("Error to create thread, #%d\n", rc);
            exit(-1);
        }
    }
    pthread_exit(NULL);
}

1 Ответ

2 голосов
/ 12 ноября 2019

Как только ваш основной поток завершается, программа завершает работу (как и потоки). Если вы хотите, чтобы ваша программа никогда не заканчивалась, вы должны добавить while(1); в конце основного цикла while.

Обратите внимание, что это не то, как это сделать правильно, у ваших потоков должен быть конец, иглавный поток должен дождаться завершения всех потоков, прежде чем покинуть себя.

...