'programming/C_C++'에 해당되는 글 279건

  1. 2016.09.28 SunOS에서 usleep() 문제 관련

반응형




http://zalhae.blog.me/30151545137


SunOS에서 usleep() 문제 관련


SunOS의 경우 multi-thread 프로그램에서 usleep()을 빈번히 사용할 경우 프로그램이 멈출 수 있는 구조적 문제가 있습니다.

SIGALRM 이 발생되는데, 그렇다고 SIGALRM을 무시하면 실제로 해당 시그널이 필요한 순간 못쓰게 되는 문제가 있습니다.

또한 SIGALRM 뿐만 아니라 hang과 비슷한 상황도 발생될 수 있습니다.

다른 레퍼런스 사이트에서는 nanosleep()이 안전하기 때문에 usleep()을 대체하여 사용할수 있다고 하고 있으나,

실제 악조건을 만들어서 테스트한 결과 Linux, AIX, HP-UX에서는 문제가 발생되지 않았고,

SunOS에서는 nanosleep()도 문제가 있었습니다.

이에 대하여 아래와 같이 usleep() 함수를 사용하시면 문제를 회피할 수 있습니다.


---------------------------------------------------------------------

#define _SUN_MACHINE

...



int safe_usleep(unsigned int nsec)

{

#ifdef _SUN_MACHINE

    struct timeval tv = { 0, nsec };

    return select(0, NULL, NULL, NULL, &tv);

#else

    return usleep(nsec);

#endif

}


---------------------------------------------------------------------

[참고]


http://kldp.org/node/88947

man nanosleep;





반응형
Posted by 공간사랑
,