gpt4 book ai didi

c - 使用 pthread 时如何检查线程是否终止?

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:02 25 4
gpt4 key购买 nike

如何检查线程是否终止?在我的例子中,我有 my_pthread[5],我想检查 5 个线程中的任何一个是否已完成其工作(已终止?- 我不确定),然后我可以给它们更多的工作。

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

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

如果线程 [3] 在线程 [0] 之前完成,然后我必须等待线程 0、1、2 完成怎么办?那不是我想要的。

最佳答案

听起来你想要的不是等待一个线程完成/退出,而是等待一个线程完成/退出表明工作已完成,因此您可以为他们提供更多工作。

我会做的是

  • 创建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/

关于c - 使用 pthread 时如何检查线程是否终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1759284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com