2010-12-06 2 views
4

우분투 10.10, 코드 :: 블록을 GCC 4.2와 함께 사용하고 있습니다.메인이 pthread 후에 계속되지 않습니다

나는 그런 식으로 코드를 작성했습니다 : 홈페이지가 시작

#include <iostream> 
#include <stdlib.h> 
#include <pthread.h> 

using namespace std; 

void *thread1proc(void* param){ 
    while(true) 
    cout << "1"; 

    return 0; 
} 

int main(){ 
    pthread_t thread1; 

    pthread_create(&thread1,NULL,thread1proc,NULL); 
    pthread_join(thread1,NULL); 

    cout << "hello"; 
} 

는 스레드를 생성한다. 그러나 무엇이 이상한가 (나를 위해) 메인은 계속 실행되지 않는다. 화면에 "hello"메시지가 표시되고 프로그램이 끝날 것으로 예상됩니다. Windows의 경우 Delphi에서 이와 같이 작동했습니다. "main"도 쓰레드라면, 왜 계속 실행되지 않습니까? 그것은 POSIX 스레딩에 관한 것입니까?

감사합니다.

+0

는 이식성을 명시 적으로 (ATTR, PTHREAD_CREATE_JOINABLE)' –

답변

3

pthread_join을 호출하고 "to"에 가입하는 스레드에 무한 루프가 있기 때문에 중지됩니다. 링크에서

:

pthread_join을() 함수는 타겟 스레드가 종료 이미 가지고 않는 타겟 스레드가 종료 될 때까지 호출 스레드 실행을 중지.

+0

@Tolga pthread_attr_setdetachstate'으로 조인 상태에서 스레드를 만들 : 당신이 원하는만큼 많은 스레드를 해고 할 수 있습니다. 스레드가 무한 루프에 걸리므로 특정한 경우에는 pthread_join 호출 전에 실행해야합니다. pthread 라이브러리의 작동 방식을 연구해야합니다. https://computing.llnl.gov/tutorials/pthreads/ –

+0

@Tolga : pthread와 windows 스레드는 상당히 비슷하게 작동합니다. 그러나 Windows에는 join 함수와 동등한 것이 없습니다 ... – Goz

+0

Windows API처럼 "resumeThread"와 같은 함수가 없습니까? 나는 tp가 스레드의 끝을 기다리는 것을 원하지 않는다. – tcak

7

pthread_join은 (무한 루프가 있기 때문에) 결코 수행하지 않을 것입니다 (pthread_exit 호출 또는 반환) thread1 완료까지 차단합니다.