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 줄이 주석 인 경우, 마지막 스레드 출력 줄은 "스레드가 취소되었는지 확인 ..."입니다.
'boost :: thread'은 알고 있습니다. –
+1 : 거의 정확히 말하려고했던 것입니다. 다음은 동일한 정보에 대한 대체 URL입니다 (나중에 [POSIX] (http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09) 표준). –