POSIX 스레드 인터페이스에서 pthread_join(thread)
은 지정된 스레드가 종료 될 때까지 차단하는 데 사용할 수 있습니다.pthreads - 스레드 그룹에 가입하여 종료 할 때까지 대기
자식 스레드가 종료 될 때까지 실행을 차단할 수있는 비슷한 기능이 있습니까?
이 자식 스레드가 아닌 프로세스POSIX 스레드 인터페이스에서 pthread_join(thread)
은 지정된 스레드가 종료 될 때까지 차단하는 데 사용할 수 있습니다.pthreads - 스레드 그룹에 가입하여 종료 할 때까지 대기
자식 스레드가 종료 될 때까지 실행을 차단할 수있는 비슷한 기능이 있습니까?
이 자식 스레드가 아닌 프로세스나는 이것이 pthreads 그 자체로는 직접 가능하지 않다고 생각하지만, 당신은 상당히 쉽게 그 문제를 해결할 수 있습니다.
pthreads API를 사용하면 pthread_cond_wait
및 친구들을 사용하여 "조건"을 설정하고 기다릴 수 있습니다. 스레드가 종료하려고 할 때 대기중인 스레드를 깨우기 위해 조건을 신호로 보냅니다.
또 다른 방법은 파이프를 pipe
으로 만들고 스레드를 종료 할 때 파이프에 write
을 작성하는 것입니다. 파이프의 다른 쪽 끝에서 주 스레드가 select
, poll
, epoll
또는 선호하는 변종 중 하나로 기다리게하십시오. (다른 FD에서 동시에 대기 할 수도 있습니다.)
최신 버전의 Linux에는 동일한 작업을 수행하는 "eventfds"도 포함되어 있습니다 (man eventfd
참조). 그러나 최근에 추가 된 것에 유의하십시오. POSIX가 아닌 것은 Linux 전용이며, 최신판 인 경우에만 사용할 수 있습니다. (2.6.22 또는 그 이상)
필자는 개인적으로이 API가 파일 디스크립터와 유사하게 이러한 API를 처리하도록 설계되지 않은 이유를 항상 궁금해했습니다. 만약 그랬다면, 그들은 "eventables"것, 당신은 select
파일, 스레드, 타이머 ...
"나라면, 그들은"이벤트 "가되고, 파일, 스레드, 타이머를 선택할 수 있습니다." +1 : WinAPI는 실제적으로 모든 것에 대해 WaitOnSingleObject 또는 WaitOnMultipleObjects를 호출 할 수 있다는 점에서 정말 우위에 있습니다. –
나는이 작업을 수행 할 수있는 POSIX 스레드 인터페이스의 모든 기능이 있다고 생각하지 않습니다에 대한 적용 제외 wait()
UNIX 시스템 호출과 유사 할 것입니다.
자신 만의 버전을 만들어야합니다. 뮤텍스와 조건 변수에 의해 보호되는 플래그 배열 (스레드 당 하나의 플래그). "pthread_exit()"바로 전에 각 스레드가 뮤텍스를 획득하고 플래그를 설정 한 다음 "pthread_cond_signal()"을 수행합니다. 메인 쓰레드는 시그널을 기다린 후, 플래그의 배열을 검사하여 어떤 쓰레드가 join 하는지를 결정한다 (그때까지는 하나 이상의 쓰레드가있을 수있다).
당신은 사용자 정의는 pthread 조건 변수에 의해 하나의 구현해야 할 수 있습니다 :가 pthread_cond_signal는 pthread_cond_wait를(),()/어떤 pthread_cond_broadcast().
저는 다른 사람들이 말했듯이, 당신은 이것을위한 조건 변수가 필요하다고 생각합니다. 그러나 관련 동기화 문제에 대해서는 장벽을 읽을 수도 있습니다. 그것들은 어떤 상황에서는 충분하지만 다른 것들에서는 충분하지 않은 이런 종류의 대기에 훨씬 더 간단한 인터페이스를 제공합니다. –