假设主线程创建了三个工作线程。
假设所有三个线程都运行类似于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]*/}
}