2017-04-13 1 views
0

나는 pthread을 통해 생성되고, 결합 가능으로 표시된 자식을 여러 개 가지고 있습니다. pthread_join을 사용하여 하나씩 기다릴 수는 있지만 누구와도 연결되기를 기다리고 싶습니다 (즉, 어느 한쪽이 종료되자 마자). 어떤 어린이 pthread이 종료되었는지 어떻게 알 수 있습니까? 유일한 해결책은 pthread_join을 통해 차례로 폴링하나요?몇개의 pthread (자식)에게 종료 된 것을 알리는 방법

+2

원하는 코드 만 입력하면됩니다. 스레드가 종료 될 때를 알고 싶으면 코드가 종료되기 전에/전에 알려주도록 코드를 작성하십시오. 또는 각각의 쓰래드가'pthread_join'에서 블록 할 하나의 쓰래드를 기다리면, 원하는 쓰래드를 사용하여 다른 쓰레드가 종료했을 때 그 쓰레드가 알려준다. 원하는 코드를 정확하게 코딩하십시오. –

+0

@DavidSchwartz 당신의 생각을 감사하십시오. wait 알림을 사용하는 대신 pthread_join을 사용하여 하나씩 기다릴 수는 있지만, 수행 한 자식 스레드 #을 도와 준 직접 API가있는 경우 부모 스레드는 다른 작업을 수행 할 수 있습니다. –

+1

이것은 [XY 질문] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)입니다. 당신이 왜 그렇게하기를 핑계 삼을 수 있습니까? – StoryTeller

답변

0

제 생각에 스레드가 완료되면 비동기식 방법이 필요합니다. 코멘트에서 많은 사람들이 말한대로 알림 체계가 있습니다. 비슷한 문제가 있었지만 작업자 스레드에도 통신이 필요했습니다. 메인 스레드에서 도메인 소켓 (수신 대기)을 가졌습니다. 새 스레드가 연결하는 첫 번째 작업은 주 스레드에 연결하고 마지막 연결을 끊는 것입니다 (닫기). 그 동안 주 스레드에서 좋은 이전 select 또는 epoll을 사용하여 fd가 닫힌 시간을 알 수 있습니다.이를 기반으로 어떤 스레드가 닫히고 무엇을해야하는지 파악할 수 있습니다.

+0

훨씬 저렴한 통신 방법은 원자 변수를 사용하거나 큐 (동시 액세스에 대해 뮤텍스로 저장) 일 수 있습니다. 아니면 내가 무엇을 감독 했는가? – Scheff

관련 문제