pthread_kill()을 이용하여 Resume/suspend를 원하는 Thread ID를 입력하고,
Resume하고자 할 때 SIGCONT를 날리시고, Suspend하고자 할 때 SIGTSTP를
날리면 가능합니다.
그리고, Thread를 생성하자마자 Suspend를 시키고자 한다면, pthead_create()에서
직접 Thread를 생성/호출하지 않고, Thread 이름을 등록하는 지점에 ThreadProc()을
하나 만드셔서 해당 ThreadProc() 함수를 거쳐서 실제 Thread를 호출시키도록 하고,
Thread 호출 전에 pthread_kill(pthread_self(), SIGTSTP) 또는 rasie(SIGTSTP)를
사용하시면 가능할 것입니다.
POSIX threads에는 없습니다.그래서 pthread_mutex
POSIX threads에는 없습니다.
그래서 pthread_mutex_lock(), pthread_mutex_unlock(), pthread_cond_wait(), phtread_cond_signal() 등을 사용해서 구현합니다.
solaris라면 thr_suspend(), thr_continue() 를 쓰면 됩니다. 단 threads model을 POSIX가 아닌 solaris threads로 해야 하겠죠.. ^^
>/dev/null 2>&1
pthread_kill() 함수 + SIGTSTP or SIGCONT
pthread_kill()을 이용하여 Resume/suspend를 원하는 Thread ID를 입력하고,
Resume하고자 할 때 SIGCONT를 날리시고, Suspend하고자 할 때 SIGTSTP를
날리면 가능합니다.
그리고, Thread를 생성하자마자 Suspend를 시키고자 한다면, pthead_create()에서
직접 Thread를 생성/호출하지 않고, Thread 이름을 등록하는 지점에 ThreadProc()을
하나 만드셔서 해당 ThreadProc() 함수를 거쳐서 실제 Thread를 호출시키도록 하고,
Thread 호출 전에 pthread_kill(pthread_self(), SIGTSTP) 또는 rasie(SIGTSTP)를
사용하시면 가능할 것입니다.
하지만, 시스템 제한사항에 따라 동작이 약간 다를 수가 있습니다. (NPTL ...)
레드햇/몬타비스타 사이트에서 추가 정보를 얻을 수 있을 것입니다.
댓글 달기