В следующем коде я создаю несколько потоков, и каждый поток засыпает в течение нескольких секунд.
Однако моя основная программа не дожидалась завершения потоков, я был в предположении, что потоки продолжат работать, пока они не закончат сами.
Есть ли способ сделать потоки продолженными, даже если вызывающий поток заканчивается.
#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;
}
Спасибо
Edit:
Извините, что не уточнил, возможно ли это без явного отслеживания текущих текущих потоков и с помощью объединения.