В следующем коде я создаю некоторое количество потоков, и каждый поток спит несколько секунд.
Однако моя основная программа не ожидает завершения потоков, я полагал, что потокипродолжайте работать, пока они не закончатся самостоятельно.
Есть ли способ заставить потоки продолжать работать, даже если вызывающий поток завершает свою работу.
#include <pthread.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>
int sample(int min,int max){
int r=rand();
return (r %max+min );
}
void *worker(void *p){
long i = (long) p;
int s = sample(1,10);
fprintf(stdout,"\tid:%ld will sleep: %d \n",i,s);
sleep(s);
fprintf(stdout,"\tid:%ld done sleeping \n",i,s);
}
pthread_t thread1;
int main(){
int nThreads = sample(1,10);
for(int i=0;i<nThreads;i++){
fprintf(stderr,"\t-> Creating: %d of %d\n",i,nThreads);
int iret1 = pthread_create( &thread1, NULL, worker, (void*) i);
pthread_detach(thread1);
}
// sleep(10);//work if this is not commented out.
return 0;
}
Спасибо
Редактировать:
Извините, что не уточнил, возможно ли это без явного отслеживания моих текущих запущенных потоков и с помощью объединения.