흠 pthread를 안써봐서 잘 모르겠습니다만.
그 "종료"라는 의미가 어떤건지 정확히 모르겠네요.
자바에서도 살아있는 스레드가 있더라도 System.exit(); 로 바로 프로세스 죽습니다.
다만 스레드가 있고 메인 스레드가 더이상 할일이 없을때 프로세스가 끝나 버리진 않죠.
근대 pthread는 스레드가 활동하고 있는대도 메인스레드에 더이상 할일이 없어지면 (즉 main function에서 더이상 할 코드가 없어지면) 프로세스가 끝나 버리나요?
흠 pthread를 안써봐서 잘 모르겠습니다만.
그 "종료"라는 의미가 어떤건지 정확히 모르겠네요.
자바에서도 살아있는 스레드가 있더라도 System.exit(); 로 바로 프로세스 죽습니다.
다만 스레드가 있고 메인 스레드가 더이상 할일이 없을때 프로세스가 끝나 버리진 않죠.
근대 pthread는 스레드가 활동하고 있는대도 메인스레드에 더이상 할일이 없어지면 (즉 main function에서 더이상 할 코드가 없어지면) 프로세스가 끝나 버리나요?
[code:1]#include <pthread.h>vo
pfunction1 이 종료해도 pfunction2 (pfunction1에서 pthread_create로 생성한 쓰레드 함수)
는 잘 살아있군요.
설마 자바의 쓰레드는 프로세스가 종료해도 쓰레드가 남아있나요?
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
[code:1]그런데 pthread_create 의 경우에는
pthread_create를 부르는 thread가 메인thread 가 아닌이상 부모 프로세스가 죽는다고 자식 Thead가 죽지는 않습니다.
그러나 메인 thread가 죽으면 당연히 프로그램이 종료 되니 자식이 죽겠지요.
자바에서는 main함수에서 thread를 띄우면 그 자식 thread가 죽을때 가지 main함수(메인thread)가 대기 하고 있던 것으로 기억이 납니다.
아마 그것때문에 이런 질문이 나오지 않았다 생각이 듭니다.
pthread_join() 함수를 찾아보시기 바랍니다.
원하는 결과를 얻을수 있을겁니다.
--
cdecl
java에서..
메인 스레드가 대기 하지도 않고...
프로세스 죽어도 스레드가 살아있지도 않습니다...
자바의 스레드를 잘못 이해 하신듯...
새 생각 :)
Re: java에서..
아.. 좀 착각했군요,,
죄송~
c/c++ 에서는 살아있는 thread가 있더라도 process가 종료되면
그것들이 전부 종료되지만
java는 daemon thread가 아닌 하나이상의 thread가 살아있다면
main이 끝나더라도 process가 안끝나거든요.
Re: java에서..
pthread_exit를 써보세요.
Re: java에서..
흠 pthread를 안써봐서 잘 모르겠습니다만.
그 "종료"라는 의미가 어떤건지 정확히 모르겠네요.
자바에서도 살아있는 스레드가 있더라도 System.exit(); 로 바로 프로세스 죽습니다.
다만 스레드가 있고 메인 스레드가 더이상 할일이 없을때 프로세스가 끝나 버리진 않죠.
근대 pthread는 스레드가 활동하고 있는대도 메인스레드에 더이상 할일이 없어지면 (즉 main function에서 더이상 할 코드가 없어지면) 프로세스가 끝나 버리나요?
새 생각 :)
Re: java에서..
네.
자바는 몰라서 그쪽에 관해서는 답변을 못해드리겠지만, 다른 쓰레드가 종료
자바는 몰라서 그쪽에 관해서는 답변을 못해드리겠지만, 다른 쓰레드가 종료하는걸 기다리려면 pthread_join()을 쓰면 됩니다. (위에 답변이 있군요)
pthread
위에 제가 올린 글이 너무 짧은 것 같아 조금 상세히 올리겠습니다.
자바건 pthread건 process가 죽으면 당연히 쓰레드는 다 죽습니다.
자바에서 process가 죽어도 thread가 안 죽는다고 하신건
pthread의 main쓰레드(init 쓰레드가)가 죽었을 때 작업중인 다른
쓰레드들은 계속 작업중이라고 말씀하신 것 같네요.
위 말씀이라는 가정하에
pthread에서도 main 쓰레드 종료시 작업중인 쓰레드는 계속 작업을
할 수 있습니다. 단 하위 쓰레드를 detach 시키셔야 합니다.
detach가 안 된 상태에서는 pthread_join을 쓰셔야 하고요.
대충의 코드는 다음과 같습니다.
void *greeter(void *)
{
pthread_detach(pthread_self());
loop forever
print something
}
int main(int argc, char **argv)
{
create thread
loop 3 time
print something
pthread_exit(NULL);
}
위 형식으로 해 보시면 main 쓰레드 종료시에도 greeter 쓰레드가 계속
동작하시는 걸 보실 수 있습니다.
물론 각 쓰레드에서 pthread_detach()를 호출하지 않고 생성시부터
detach 상태로 만드실 수도 있습니다.
man 페이지에서 pthread_attr_setdetachstate() 및 pthread_exit()를
찾아보세요.
즐~~~~
댓글 달기