나는 각각의 요청에 대해 스레드를 생성하는 다른 스레드를 생성하는 하나의 주 스레드를 가지고 있고 아마도 교착 상태 때문에 코어 덤프가 발생하는 응용 프로그램이 있습니다.스레드를 생성 할 때 교착 상태가 발생합니까?
__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/리눅스
나는 어떤 신호도 무시하지 않을 것이다.
여기에서 문제가 될 수있는 것은 무엇입니까?
문자 그대로 스레드 시작 루프입니까? 지역 변수가 참이 될 때까지 가능한 한 많이 * * 가능한 한 빨리 * * 회전 시키십시오 (결코 그렇지 않을 수도 있습니다)? – WhozCraig
이러한 호출의 반환 코드를 확인하고 응답하거나 어딘가에 기록합니까? – Duck