티스토리 뷰

이전 시간 살펴본 스레드 취소요청에 대해 직접 돌려보며 알아보자

1. pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL)

취소요청을 수락하지 않으며 진행한다.

50000번째마다 정해진숫자만큼 무한루프를 돌며 취소요청을 검사한다면, 취소요청이 있더라도 수락하지 않아서(취소요청이 없는 것처럼 행동) pthread_testcancel()에서 작동되지 않는다.

 

disable state에서는 취소요청이 수락되지 않아서 끝까지 loop가 실행됨


 

2. pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL)

취소요청을 수학하며 진행한다.

50000번째마다 정해진숫자만큼 무한루프를 돌며 취소요청을 검사한다면, 취소요청이 있을 때 pthread_testcancel()에서 걸려서 종료된다. 그때 PTHREAD_CANCELED가 pthread_join시에 두번째 인자로 &result를 넣으면 result에 리턴된다.

<<1.번의 코드중 특정부분만 수정 -> 스레드 시작함수 내용만 변경함>>

2.1 5000번마다 검색하기 때문에 N번에서 종료되었다면 N-5000~N 사이에 취소요청이 들어왔음을 알아챌 수 있다.
2.2 type을 deferred로 설정하고 돌렸을 경우, 지연취소모드가 설정됨

=> 2.1의 사진에서 보면 50000번마다 cancel검사를 진행하기때문에 5000+(1~4999)일때의 경우는 지연취소이기때문에 취소요청이 들어왔어도 지연되어 그냥 넘어가고 5000*n번중에서 반응한다. 현재는 250000번일때 취소요청이 수용되었다. => 취소요청은 지연취소를 사용하기에 20000~25000루프 !도중에! 취소요청이 도착했음을 알 수 있어야한다.

 


 

'네트워크프로그래밍' 카테고리의 다른 글

스레드[경쟁실행, 동기화문제] 예제  (0) 2021.06.02
뮤텍스 [ 스레드 경쟁과 동기화문제]  (0) 2021.06.02
THREAD 프로그래밍  (0) 2021.05.31
세마포어(2)  (0) 2021.05.31
세마포어  (0) 2021.05.31