2017-04-13 27 views
0

我有几个pthread儿童通过pthread_create创建并标记为可连接。我可以用pthread_join一个接一个地等他们,但我想等待加入任何人(即,只要其中任何一个结束)。 我如何知道pthread终止了哪个子女? 是通过pthread_join一个接一个地轮询他们的唯一解决方案吗?如何查询几个pthreads(儿童)知道哪一个终止

+2

只需编码你想要的。如果您想知道某个线程何时终止,请编码以在终止之前/终止时通知您。或者有一个线程可以在'pthread_join'中为每个想要等待的线程阻塞,并让该线程告诉您何时其他线程使用任何您想要的方法终止。只需编码你想要的。 –

+0

@DavidSchwartz欣赏你的想法。我可以用pthread_join一个接一个地等待它们,但是如果有一个直接的API可以帮助我完成子线程#,那么父线程可以同时完成一些其他任务 –

+1

我认为这是[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你能详细说明你为什么要这么做吗? – StoryTeller

回答

0

按照我的理解,您需要一些异步方式来了解线程何时完成。正如许多人在评论中所说的那样有一个通知计划。我有类似的问题,但我的工作线程还需要一些沟通。我在主线程中有一个域套接字(listen),新线程所做的第一件事是连接并将其标识发送给主线程,最后一个是断开连接(关闭)。同时在主线程中,您可以使用优秀的select或epoll来了解fd何时关闭,根据该线索可以确定哪个线程已关闭以及要执行什么操作。

+0

一种便宜得多的通信方式是使用原子变量或者可以是一个队列(通过互斥体对并发访问保存)。还是我监督了一些事情? – Scheff

相关问题