int 공유변수 = 0;
메인함수()
{
.....
쓰레드 시작();
while(1)
{
블로킹 함수();
}
.....
}
쓰레드()
{
gets(...);
}
대충 수도코드로 이런식으로 프로그램을 짜놨어
별도 스레드 부분에서 gets를 통해서 사용자 입력을 받고, "exit" 스트링이 들어왔을때 프로세스를 종료시키려고 하거든
근데 내 생각으로는 쓰레드에서 킬 명령을 받으면 공유변수를 1로 세팅하고 메인스레드에선 공유변수가 1일때 저 스레드를 정상적으로 종료하고 메인 스레드도 같이 정상적으로 종료하는 로직을 생각했거든
근데 블로킹 함수가 있다보니까 아무래도 공유변수를 액세스할 방법이 없어. 블로킹 함수를 논블로킹으로 바꾸는 방법이 있겠지만 일단 이건 제쳐두고 ㅇㅇ 하나 궁금한게 있거든
그냥 단순하게 생성된 저 스레드에서 "exit" 스트링을 받으면 바로 exit(); 함수를 호출해서 프로세스를 킬하는 방법을 생각해봤는데
구글링 하다보니까 이게 딱히 좋은방법은 아니라고 하던데 왜 그런거냐?? 내공이 병신이라 정확히 어떤 문제인지 캐치를 못하겠어.
정상적인 쓰레드 종료 없이 exit() 함수를 호출해버리면 메인스레드만 죽고 동적으로 생성된 스레드는 계속 살아 움직이는건가?
니 대가리 따면 심장은 살아서 뛰냐?
사스가 비유한번 죽여주는군요 감사합니다.
아니 살아움직이는게 아니라 그냥 별도의 스레드에서 exit(0);을 호출해도 알아서 자원 해제 다 시켜주는거임?
thread.join
exit은 프로세스 종료 시스템 함수 ExitProcess를 부르니 모든 스레드 다 종료됨.
그렇군요
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.