[질문]쓰레드 관련 질문입니다.
글쓴이: leolo / 작성시간: 수, 2005/11/16 - 10:21오후
쓰레드 관련 질문입니다.
main 함수 시그널핸들러 등록() 쓰레드 생성 for(i = 0; i < 100; i++) { iid = pthread_create(&g_pth[i], NULL, p_func, (void *)&i); } for(i = 0; i < 100; i++) { pthread_join(&g_pth[i], NULL) }
쓰레드 함수는 각각 포트별로 다른 프로세스에게서 전달되는 이벤트를 기다립니다.(WAIT)
이런 구조에서 질문드리겠습니다.
첫번째 질문드리겠습니다.
만약, sigterm이 들어올 경우 어떻게 처리하여야 하는지요. 제 생각에는 각각 포트별로 WAIT하고 있는 큐를
제거해줘야하는데. 방법을 잘 모르겠습니다.
두번째 질문드리겠습니다.
pthread_create()에서 총 100개의 쓰레드를 만들 경우, 이 100개를 모두 만들었을 때, 다음단계로 넘어갈려고 하는데.
어떻게 해야죠.. 즉, 100개의 쓰레드가 모두 wait까지 했을 경우 다음 진행이 수행되도록 하고 싶습니다.
세번째 질문드리겠습니다.
기본적인건데 참 부끄럽네요. p_func에서 while(1) 을 해서 무한 루프를 도는데 pthread_join()을 하지 않으면 프로세스가 끝나더군요.
그말은 pthread_join()을 하지 않을 경우 main thread가 종료되어서 끝나는 것인지요.
부탁드립니다.
Forums:
Re: [질문]쓰레드 관련 질문입니다.
각 자식 스레드가 종료되기 전에 별도의 정리 작업이 필요하다는 뜻으로 이해하고 말씀드리자면,
1. 시그널을 받으면 특정 플래그를 설정해 주고,
하면 됩니다. 이렇게 하려면 자식 스레드가 비동기적으로 accept()를 해줘야 겠네요. 이것 말고도 다른 방법도 다양하게 있을 수 있겠구요.2. 자식 스레드들은 주기적으로 그 플래그를 확인해서, 플래그가 설정되어 있으면 하던 일을 중단하고 정리 작업에 들어가도록
스레드에서의 시그널 처리와 관련해서는 "스레드 and 시그널" 정도로 검색해 보시면 몇 개의 글이 나옵니다.
스레드 실행에 있어서 '동기'를 맞추고 싶으신 거로군요. 이런 건 어떨까요?
1. 현재 wait 상태인 스레드의 개수를 나타내는 변수를 만들고, 그 변수의 동기화를 위한 mutex를 만들고,
2. 자식 스레드는 wait 하기 직전에 (mutex를 잠그고) 1에서 만든 변수를 1만큼 증가시키고 (mutex를 풀고),
3. 부모 스레드는 스레드 생성을 마친 후 주기적으로 (mutex를 잠그고) 1의 변수를 확인하여 (mutex를 풀고) 100이 된 걸 확인한 후에 진행을 계속하고...
말씀하신 대로입니다.[/][/]
$PWD `date`
댓글 달기