[Q] thread 각각에서 독립적으로 select를 호출할때
글쓴이: blee / 작성시간: 수, 2004/04/28 - 5:52오후
안녕하세요.
소켓이건 파일 디스크럽터 건 같은 상황 일것 같은데요..
동시에 돌아 가는 thread가 여러개 있을때요.
아래와 같은 코드가 각 쓰레드 마다 있습니다.
그러니까.. select를 이용한 read에서 타임 아웃을 주는 코드입니다.
:
tv.tv_sec=0;
tv.tv_usec=100;
FD_ZERO(&fdsr);
FD_SET(fd,&fdsr);
res=select(fd+1, &fdsr, NULL, NULL,&tv);
if(FD_ISSET(fd,&fdsr))
res = read(fd, buf, total);
:
여기서 궁금한 것은 thread에서 각각 select를 호출해도
상관 없는지요?
월래 select는 파일 디스크립터중 값이 가장 큰넘을 인자로 주고
멀티 플렉싱으로 구현하고자 할때 사용하는 함수인것 같은데..
스레드에서 독립적으로 소켓을 열어서 그 소켓에 대한 각각에
select를 사용하여도 문제가 없는 가? 하는 것입니다.
문제가 생기는가요?
Forums:
Re: [Q] thread 각각에서 독립적으로 select를 호출할때
예, 상관없습니다.
예, 문제 없습니다.
*단, 두개의 쓰레드가 동일한 소켓에 대해 FD_SET()을 사용하여 이벤트를 대기했다면,
두개의 쓰레드중 반드시 하나에 대해서만이벤트가 발생하는 것은 보장되지만(mutual exclusion) ,
어느 쓰레드가 그 이벤트를 가지게 될지는 아무도 모릅니다(race condition).
며느리도 몰라요.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기