2010-07-15 5 views
2

Linux 맨 페이지에 따르면 다음 기능 만 스레드 취소 지점입니다. pthread_join, pthread_cond_wait, pthread_cond_timedwait, pthread_testcancel, sem_wait, sigwait. 내 테스트 프로그램에서 스레드는 usleep에서 종료됩니다. 스레드 기능 :usleep가 스레드 취소 지점을 생성합니까?

 
void* ThreadFunction(void* arg) 
{ 
    int n = 0; 

    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); 
    pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL); 

    for(;;) 
    { 
     ostringstream s; 
     s << "Thread iteration " << n++; 
     PrintLine(s.str().c_str()); 

     usleep(500000); 

     PrintLine("Check whether thread canceled..."); 
     pthread_testcancel(); 
     PrintLine("Thread is not canceled - continue"); 
    } 

    pthread_exit(NULL); 
} 

주요 기능은 pthread_cancel를 실행하면, 나는이 쓰레드에 의해 인쇄 된 마지막 줄 "... 스레드가 취소 여부를 확인"것을 기대합니다. 그러나 종료 전에 항상 "Thread iteration ..."을 인쇄합니다. 즉, 휴면은 취소 지점입니다. 나는 그것이 정확하다고 생각한다 - 모든 수면 기능은 취소 가능해야한다. 그러나 이것은 문서화되지 않았습니다.

usleep 줄이 주석 인 경우, 마지막 스레드 출력 줄은 "스레드가 취소되었는지 확인 ..."입니다.

답변

9

을 취소 할 점과 선택을 취소 점의 전체 목록은 POSIX 사양에서 사용할 수 있습니다 :

http://opengroup.org/onlinepubs/007908775/xsh/threads.html

usleep()가 나는 악기에 pthread_testcanel의 호출 트리를 보았다 필수 취소 점

+0

'boost :: thread'은 알고 있습니다. –

+0

+1 : 거의 정확히 말하려고했던 것입니다. 다음은 동일한 정보에 대한 대체 URL입니다 (나중에 [POSIX] (http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09) 표준). –

0

입니다. Mac OS에서 OSSpinLockLock 함수를 호출하는 응용 프로그램입니다.

하지만 사용하지 않는 것 같습니다.

관련 문제