加入多个线程而无需等待使用pthread库和c ++

时间:2015-02-10 04:04:53

标签: c++ multithreading pthreads

假设主线程创建了三个工作线程。 假设所有三个线程都运行类似于work()的函数  下方。

bool signal[3]={false};

void* work(void* thread_id)  //each worker thread is given a thread_id when created
{
    int x = *(int*)thread_id;
    int data;
    /*code*/
    signal[x] = true;  //this thread finished
    pthread_exit(&data);
}

通常我使用以下代码来加入线程。

int main()
{
    pthread_t workerThreads[3];
    int master;
    /* code for creating threads */
    for(int i=0;i<3;i++)
    { 
        void* status;
        master = pthread_join(workerThreads[i],&status);
        /* code for handling the return data from thread*/
    }  
}

我的意思是如果workerThreads[2]workerThreads[0]之前完成,使用上面的代码,主线程仍需要等待workerThreads[0]先完成才能处理workerThreads[2]

有没有办法在不等待的情况下加入线程?

我可以使用这样的东西吗?

while(!signal[0]||!signal[1]||!signal[2]){
if(signal[0]){/*join workerThreads[0]*/}
if(signal[1]){/*join workerThreads[1]*/}
if(signal[2]){/*join workerThreads[2]*/}
}

0 个答案:

没有答案