Hi there!

I am a student studying computer science.

시스템 프로그래밍

시스템 프로그래밍 6장 - Thread : Cancellation

만능성구 2020. 5. 6. 01:09
728x90

Thread cancellation

- thread가 완료 되지 않았을 때 cancel하는 system call

- pthread_cancel(pthread_t tid)

cancellation types

  • asynchronous cancellation
    • 어떤 thread를 종료하기 위해 호출하면 즉시 종료된다.
    • 만약에 대상 thread가 현재 cancel요청이 왔을 때 resource는 바로 반환을 한다.
  • deferred cancellation
    • 현재 자신의 일을 수행완료한 다음에 종료한다.
    • 그 thread는 특정 point에서 종료된다.
    • pthread_testcancel()를 호출하여 cancel point를 만들어서 check한다.
    • pthread_cleanup_push()를 호출하여 cancel point에서 register를 clean한다.??
int pthread_setcancelstate(int state, int *oldstate);
int pthread_setcanceltype(int type, int *oldtype);
두가지 함수를 통해서 특정 thread에 대해서 cancel state와 type을 정해준다.

state : cancel 가능한가 enable / disalbe

oldstate : 기존의 이전 state가 어떤 것이었는지

return

Dangerous Argument Passing

int rc, i;

for(i=0; i < NUM_THREADS;i++) {
  printf("Creating thread %d\n", i);
  rc = pthread_create(&threads[i], NULL, routine, (void *) &i);
  ...
} 

implicit sharing 암묵적인 공유

- 현재 thread와 새로운 thread에서 i값이 공유되고 있다.

- 새로운 thread에서 i값이 변경되어서 오류가 발생할 수 있다.

- 흔히 하는 실수니 조심하자

728x90