Я пытаюсь создать несколько рабочих потоков в функции с именем engine_setup
, но каждый раз, когда функция возвращается, каждый поток также останавливается.Я пытался создать pthread id как глобальный указатель, но это не помогло.вот глобальный: pthread_t * threadIDs;
функция engine_setup:
query_helper* engine_setup(size_t n_processors) {
//some code that is not relevant
int err;
threadIDs=malloc(n_processors*sizeof(*threadIDs));
for(int i=0;i<n_processors;i++){
err = pthread_create(&threadIDs[i],NULL,tp,(void*)helper);
if (err != 0)
printf("can't create thread \n");
}
printf("end setup\n");
return helper;
}
и указатель на функцию потока здесь:
void* tp(void * ptr){
query_helper * helper=(query_helper*)ptr;
while(1){
printf("1\n");
}
}
вывод выглядит примерно так:
1
1
1
1
1
1
1
1
1
end setup
, который показывает, что все потоки остановились при возврате engine_setup.Есть ли способ заставить их работать?