2017-04-13 32 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

相關問題