현재 실행중인 쓰레드는 어떻게 알아여?
글쓴이: 익명 사용자 / 작성시간: 목, 2002/05/09 - 1:38오후
안녕하세요..
pthread_t thread[10];
그리구 서버소켓이 대기하구 있습니다.
서버에 클라이언트가 접속할때마다 쓰레드 하나 생성해서 작업을 하구
쓰레드 종료 시킬려구 하거든요.. 근데..
thread[0]이 현재 실행중인지 아니면 대기중인지 알고싶다면 어떻게 해야
하나요?
클라이언트 접속하면 현재 실행중이 아닌 쓰레드를 이용할려구 하거든요.
for(i = 0; i < 10; i++)
{
if(!thread[i]가 실행중)
{
pthread_create(thread[i]~~~~~)
}
}
이런식으로 할려구 하거든요.. ㅡ.ㅡ 부탁드립니다.
Forums:
Re: 쓰레드 풀을 구성하셔야 할듯..
pthread_t의 타입 정의를 보면
/usr/include/bits/pthreadtypes.h
typedef unsigned long int pthread_t
와 같이 unsigned long int 를 typedef한 형태입니다.
pthread_t[10]이라고 한것은 결국 unsigned long int [10]과
동일하겠죠...
쓰레드 작업을 시작하기 전에,pthread_t[10] 배열값을
모두 0으로 셋팅하고,
쓰레드를 만들때는 pthread_t[10]배열을 뒤져서 값이 0은 것에다가
할당 하면 되겠죠. 만약pthread_t[3]에 할당이 되었다면
pthread_t[3]의 값은 0이 아닌 쓰레드 id값일테고,,
그러면 3번 배열은 다음번 쓰레드가 사용될때 쓰이지 않겠죠..
3번 쓰레드는 작업이 종료되면 다시 이것을 0으로 셋팅해서
다른 쓰레드가 사용되도록 하면 될듯 싶네요..
여기가까지가 질문에 답변이고
제가 생각하는 더 나은 방법은...
첫번째 그냥 접속이 들어 오는데로 쓰레드를 생성하고,
바로 pthread_detach시켜서 종료 시켜 버리는 방법을 취하는게 더
좋을듯 싶네요.
님께서 생각하는 방법은 동시에 정적인 배열 사이즈 만큼만
수용을 하니까 한계가 있습니다.
아니면,,,
쓰레드 풀을 구현을 하는 방법이 있는데,
요청이 들어 오면 큐에 저장을 하고
큐의 뒷단에 일정 수량의 쓰레드를 띄워두고
큐에 작업이 있으면 작업 쓰레드들이 이것을 퍼가는 방법이
있겠죠..
Pthreads Programming란 책을 보시면
쓰레드 풀구성에 관한 예제가 있습니다.
http//www.ezdoum.com/stories.php?story=02/05/09/0348890
책의 예제파일이 첨부화일도 등록되어 있으니,
참고 하시면 될듯 하네요..
ps. 쓰레드 공부하기에 좋은 책입니다.
Re^3: 감사합니다..^_____________^
답변 넘 감사드립니다...
움.. 그런 방법이 있었군요.. 어찌나.. 머리가 안돌아가는지..
너무 감사드리구여.. 고민하던거 해결되니까.. 기분이좋네여..
행복하세요~~~
Re^2: 멀티쓰레드(pthread)관련 정보 모음
음 쓰레드 이야기가 나온김에, 제가 참고로 하는
쓰레드 프로그래밍 정보를 한자리로 모았습니다.;;
멀티쓰레드(Pthread) 프로그래밍
http//www.ezdoum.com/stories.php?story=02/05/09/5651994
참 pthread_t[]는 동시에 접근하는 컨텍스트가 많으니
잠금이 필요하겠죠 ^^
윗글을 수정하고 싶은데, 패스워드가 --;
댓글 달기