pthraed에서 해당 쓰레드가 현재 생성되었는지에 대한 여부를 어떻게 알수있을까요?
글쓴이: 콩수니 / 작성시간: 월, 2012/03/12 - 5:01오후
안녕하세요
pthread를 이용해서 다중 처리 서버를 구현하는데요
하나의 클라이언트에 대해서 하나의 쓰레드를 주어서 작업을 진행하려고합니다
생성할수있는 쓰레드를 한정을 두어서 관리하려고 하는데요
그래서 쓰레드를 배열로 생성하고 클라이언트 요청시 쓰레드 하나를 주는데 소켓이 끊어지면
자동으로 쓰레드를 종료 시키고 다른 클라이언트에게 할당 대기를 하려고합니다.
그럴려면 해당 쓰레드가 현재 생성되어 작업을 수행중인지에 대한 여부를 알아야 하는데요
관련함수를 찾아보는데 열심히 찾아봤는데 없는건지. 안보이는건지 아닌 다른 방법으로 해결해야 하는지
조언 부탁드립니다!
Forums:
thread pool을 만들어서 관리하신다면...
우선, 말이 좀 애매합니다. 하나의 클라이언트가 accept되면 client당 하나의 thread에서 처리한 다는 것은 이해하겠습니다.
그 뒤에 socket이 끊어지면 thread를 종료시키고 다른 클라이언트에게 할당 대기를 한다는 것이!! 연결만 종료시키는 것이지 thread를 종료시키는 것은 아니지요... 즉, 다시 thread pool로 돌아가 다른 클라이언트의 accept를 기다린 다는 것이지요. 즉, thread를 종료시키지 말아야 합니다. 왜냐하면 thread pool을 만드는 이유가 thread pool 생성 및 종료에 대한 overhead가 있기 때문에 thread들을 미리 만들어 놓고, 빠르게 동작시키려는 것이지요. thread pool을 만드는 방법은 지천에 깔려 있습니다. 아래 예제가 적당할 듯 한데, 한번 참고해 보세요.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Thread/Advanced/ThreadPool
쓰레드 풀!!
글을 읽어 보니깐 제말이 그런 오해를 살수있군요!
그렇다고 다시 설명하기에는 힘들꺼같고 어쨋든 써주신 쓰레드 풀 이 제가 찾던 해결방법인것같습니다
저에 검색 능력을 탓해야 하나요 joinc에도 여러번 검색하고 살펴보았는데ㅠ
아무튼 쓰레드풀 정보 감사합니다.!
devband
엄밀히 말하자면, pthread_create()가
엄밀히 말하자면, pthread_create()가 0을 리턴하는것만으로도
thread객체가 생성됐다고 정의할수 있습니다.
여기서 생성이라는 말이, context-switch가 일어나고, 해당 쓰레드가 OS의 scheduler에 의해
실행 context로 넘어갔다는 것을 의마하는것은 아닙니다.
쉽게말하자면, 생성됐다는말이, 실제로 실행되어졌다는것을 의미하지는 않습니다.( 실행 1번 됐을수도 있고, 이미 100번은 실행됐을수도 있고, 아예 안됐을수도 있고..그거야 운영체제의 프로세스 스케줄러가 담당하는 부분이죠. )
따라서, 여러 쓰레드간에 데이터를 교환하고, 실행 순서를 컨트롤하기위해
mutex와 conditional variable을 쓰는겁니다.
https://computing.llnl.gov/tutorials/pthreads/
위 문서에 mutex, conditional variable에 대한 설명이 예제와 함께 잘 나와있으니
읽어보고 적용해보세요.
댓글 달기