如何检查如果一个线程使用并行线程时终止?(How do I check if a thread is

2019-09-30 06:30发布

如何检查如果一个线程被终止? 就我而言,我已经my_pthread [5],我想检查是否有5个线程的完成其工作(被终止? - 我不知道),那么我可以给他们更多的工作要做。

如果我用在pthread_join(),那么它必须是:

pthread_join(my_pthread[0]);
...
pthread_join(my_pthread[4]);

等待,如果线程[3]线程[0]之前完成我有什么,然后thread0,1,2来完成? 这不是我想要的。

Answer 1:

这听起来像你想是不是等待线程完成/出口什么,但对于一个线程的信号,它与完成工作,这样你就可以给他们更多的工作。

我会做的是

  • 创建5个工作队列,和1个工作结果队列

  • 5个线程循环从其工作队列和职位结果返回到相同的结果队列中提取工作。

(发送工作到5个线程)的主线程会做这样的事情:

for(;;) {
  struct threadmessage msg;
  struct *work_result;
  struct *work;
  thread_queue_get(&result_queue,NULL,&msg);
  work_result = msg->data;
  handle_result(work_result);
  work = get_more_work();
  thread_queue_add(worK_result->queue,work,0); 
  free_work_result(work_result);
}

每5个工作线程(处理一些工作,张贴结果返回给主线程)会做:

for(;;) {
  struct threadmessage msg;
  struct *work_result;
  struct *work;
  thread_queue_get(my_queue,NULL,&msg);
  work = msg->data;
  process(work_result);
  work_result->queue = my_queue;
  thread_queue_add(&result_queue,work_result,0);
  free_work(work);
}

实现这样的队列中的代码在这里: http://asgaard.homelinux.org/svn/threadqueue/



Answer 2:

  1. 如果他们不沾边,你可以在他们等待使用pthread_join :这种方法“等待”一个线程来完成。 我不知道这是你想要的。

  2. 如果你只是想给它们一些其他的工作(即保持其运行),然后使用某种如一个线程安全队列的通信信道。 换句话说,使用队列时,作业完成的信号,并通过一个单独的队列推新的就业机会。

另外,看看这个主题上,所以当它涉及到分离线程。



Answer 3:

我知道,如果你使用的是等待()函数的父函数,但是也有一些子线程设置信号。 然后,您可以使用wait.h中定义的一些宏观的,这将让你知道什么是完成了线程的状态是。 此外,如果线程完成,你使用exit()命令,什么都你设置的参数有被送回父线程。 你要知道,这是所有在C世界。 其它语言的里程可能会有所不同。



Answer 4:

过了很久,因为我已经与并行线程具体工作,但与一般的多线程编程,你等待线程与调用完成加入()。 一旦加入调用完成你知道线程已完成其工作。



Answer 5:

如果我是正确的,你要知道,你的5个线程的第一完成他的工作。 可能是使用一个信号灯为他们每个人发信号给主线程,他们完成一个好主意。 像这样:

sem_t signal;

void *working_thread(void *p)
{
   // do somthing useful
  sem_post(&signal);

}

int main()
{
  // create 5 threads and semaphore
  sem_wait(&signal);
  return 0;
}


文章来源: How do I check if a thread is terminated when using pthread?