좀 찾아보니 pthread_cancel()을 받아도 바로 종료되는 것이 아니라 설정에 따라서 달라진다고 하네요. default가 PTHREAD_CANCEL_ENABLE, PTHREAD_CANCEL_DEFERRED 로 쓰레드가 생성되기 때문에 pthread_join, pthread_cond_wait, pthread_cond_timedwait, pthread_testcancel, sem_wait, sigwait 가 호출된 이후에 종료된다고 합니다.
pthread_setcanceltype()를 통해서 PTHREAD_CANCEL_ASYNCHRONOUS와 PTHREAD_CANCEL_DEFERRED 둘 중 하나로 설정할 수 있고 전자의 경우 바로 종료가 된다고 합니다.
만약 쓰레드가 critical section에 있을 경우 무조건 종료하게 되면 데이터 무결성이 깨질 수 있으니 유의하세요.
좀 찾아보니 pthread_cancel()을 받아도
좀 찾아보니 pthread_cancel()을 받아도 바로 종료되는 것이 아니라 설정에 따라서 달라진다고 하네요. default가 PTHREAD_CANCEL_ENABLE, PTHREAD_CANCEL_DEFERRED 로 쓰레드가 생성되기 때문에 pthread_join, pthread_cond_wait, pthread_cond_timedwait, pthread_testcancel, sem_wait, sigwait 가 호출된 이후에 종료된다고 합니다.
pthread_setcanceltype()를 통해서 PTHREAD_CANCEL_ASYNCHRONOUS와 PTHREAD_CANCEL_DEFERRED 둘 중 하나로 설정할 수 있고 전자의 경우 바로 종료가 된다고 합니다.
만약 쓰레드가 critical section에 있을 경우 무조건 종료하게 되면 데이터 무결성이 깨질 수 있으니 유의하세요.
댓글 달기