2013-12-11 3 views
1

나는 각각의 요청에 대해 스레드를 생성하는 다른 스레드를 생성하는 하나의 주 스레드를 가지고 있고 아마도 교착 상태 때문에 코어 덤프가 발생하는 응용 프로그램이 있습니다.스레드를 생성 할 때 교착 상태가 발생합니까?

__lll_lock_wait_private(); 
_L_lock_4714(); 
start_thread(); 
clone(); 

이 다음 코드 샘플에서 생성됩니다 : 코드의 나머지 부분은 클래스 메소드의 일부입니다 동안

do 
{ 
    pthread_t handle; 
    pthread_attr_t attr; 
    pthread_attr_init(&attr); 
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 
    pthread_create(&handle, 0, run, msg); 
    pthread_detach(handle); 
} while (!stop) 

실행은 통근 기능입니다 GDB에 나는 다음을 참조하십시오.

void* run(void* arg) 
{ 
    Handler handler; 
    Msg* msg = static_cast<Msg*> (arg); 

    handler.handleMsg(msg); 

    return NULL; 
} 

handleMsg 방법은 어떤 처리를 수행하고, 시스템 콜을 통해 다른 프로그램 호출

... 
system("AnotherApplication param1, param2 &"); 
... 

참고 앰퍼샌드. 이 프로세스가 비동기 적으로 실행되기를 원하기 때문입니다. 응답은 다른 유형의 통신을 통해 주 스레드를 통해 진행됩니다.

이 응용 프로그램은 리눅스에서 실행되었습니다

리눅스 2.6.32-358.14.1.el6.x86_64 # 1 SMP 월 6월 17일 동부 서머 타임 15시 54분 20초 2013 x86_64에의 x86_64에의 x86_64의 GNU/리눅스

나는 어떤 신호도 무시하지 않을 것이다.

여기에서 문제가 될 수있는 것은 무엇입니까?

+0

문자 그대로 스레드 시작 루프입니까? 지역 변수가 참이 될 때까지 가능한 한 많이 * * 가능한 한 빨리 * * 회전 시키십시오 (결코 그렇지 않을 수도 있습니다)? – WhozCraig

+1

이러한 호출의 반환 코드를 확인하고 응답하거나 어딘가에 기록합니까? – Duck

답변

0

pthread_detach 설명서는 우리를 알려줍니다 :

가없는 동작이 이미 분리 된 스레드 결과를 분리하려고.

그러나 시작부터 분리 된 스레드를 생성하게됩니다.

결과는 무엇입니까?

+1

실제로 OP는 분리 된 스레드를 생성하지 않습니다. 그는 속성을 설정하지만 attr을'pthread_create'에 넘겨주지 않습니다 :'pthread_create (& handle, 0, run, msg);' – Duck

관련 문제