2010-05-01 3 views
0

저는 멀티 스레딩/병렬 처리 문서에 묻혀있어 내가 디자인해온 프로그래밍 언어로 스레딩 구현을 구현하는 방법을 알아 내려고합니다.조인을 종료하지 않고 POSIX 스레드에서 '조인'(블록) 할 수 있습니까?

정신 모형을 pthreads.h 라이브러리에 매핑하려하지만 한 가지 문제가 있습니다. 번역기 인스턴스가 routine (언어의 클로저/함수) 해석을 완료 한 후에도 계속 존재해야합니다. 데이터 유형). 이후에 기타routine을 해석에 할당하려고하므로 스레드 및 인터프리터 설정/해체 시간이 절약됩니다.

pthread_join(3)pthread_exit(3)을 호출하여 원래 스레드를 차단 해제해야한다는 것을 제외하고는 문제가 없습니다. 원래 스레드 (routine을 실행 한 결과가 필요할 때)를 차단 한 다음 하위 루틴의 해석이 완료되면 차단을 해제하려면 어떻게합니까?

답변

1

pthread_cond_t; 하나의 스레드에서 기다렸다가 신호를 보내거나 다른 스레드에서 방송하십시오.

+0

이 경우에는 세마포어만으로 충분할 수 있습니다. init은 값 0으로, 한 스레드에서 대기하고 다른 스레드에 게시합니다. 그래도 같은 원리. –

+0

'기다려라.'라고 말하면, 원래 스레드의 루프와 딱딱한 루프를 의미합니까? 그건 ... 음, 나는 그런 해커/절름발이 솔루션을 피하려고 노력했다. 할 수 있다면'pthread.h' 라이브러리를 사용하여 실제로 스레드를 멈추고 싶습니다. 그래서 스케줄이 잡히지 않습니다 : 실행 시간을 줄여야합니까? – ELLIOTTCABLE

+0

@elliotcable : pthread_cond_wait : http://opengroup.org/onlinepubs/007908799/xsh/pthread_cond_wait.html – rpetrich

1

실제로는 Thread Pool Pattern의 구현이 필요한 것 같습니다. 그것은 반복적 인 쓰레드 생성을하지 않고도 비교적 단순한 개념 모델을 만듭니다. & 비용 절감. 일부 OS는 직접 지원하며, 다른 OS에서는 대기열 및 세마포를 사용하여 구현하는 것이 합리적입니다.

+0

예, 그렇습니다. 나는 이것을 만들기 위해 적절한'pthread.h' 호출이나 조사 할 다른 것을 찾고 있습니다. – ELLIOTTCABLE

관련 문제