ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 생성된 pthread를 중간에 종료시키자.(pthread_cancel)
    2012. 1. 12. 2 comments

    pthraed_create를 통해서 만들어진 thread는 중간에 종료시켜야 할 필요가 있을 때 pthread_cancel를 사용하여 실행중인 thread를 종료 시킬 수 있다.

      #include <pthread.h>

     int pthread_cancel(pthread_t thread);



    간단히 작성한 코드를 작성하여 strace한 결과를 보면, clone 함수를 통해서 thread를 만들고(thread id:2104) 나중에 pthread_cancel이 호출되는 부분에서 tgkill 함수에 thread id를 넘겨 줌으로써 해당 thread를 취소시킨다. 사실 취소라는 말 보다는 시그널을 전달하여 종료시킨다라고 할 수 있다.

    ...

    clone(child_stack=0xb782b494, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0xb782bbd8, {entry_number:6, base_addr:0xb782bb70, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}, child_tidptr=0xb782bbd8) = 2104
    rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
    rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
    rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
    ...
    ... 
    tgkill(2103, 2104, SIGRTMIN)            = 0
    .... 



    아래 내용은 내용을 정리하면서 추가로 알게 된 사실이다.

    • clone 함수는 프로세스 복사에 사용되는 fork 함수에서만 활용되는줄 알았는데 thread 만들 때에도 clone 함수가 사용된다. 
    • thread간 명령은 signal을 통해 전달된다.



    반응형

    댓글 2

    • iticworld 2013.05.24 21:55

      http://www.redhat.com/whitepapers/developer/POSIX_Linux_Threading.pdf

      strace 로 pthread 관련한 부분을 보셨군요^^

      linux pthread는 clone 을 사욯하기 때문에 비용이 application을 생성하는 것 만큼 비용이 들어 가는 것 같습니다.

      posix 에서 posix thread에 spec를 기술해 놓았죠...

      그거 한 번 보면^^ posix 쓰레드를 보다 다른 관점에서 보실 수 있을 거 같습니다.

      그리고,

      이전 아마도 2.4 kernel(?)에서 thread에 많은 버그가 존재했나봐요..

      그래서 많은 linux program들은 process 방법으로 구현하는 것 같다는 느낌이 있습니다.

      redhat에서 NPTL 을 제시했다고 해야 하나... 쓰레드가 좋아졌습니다.

      그리고,

      pthread 소스는 glibc 에 존재합니다.^^

      user level 구현되어 있는 것 같은데, 그래서인지, clone을 사용하는 것이 아닐까 느끼고 있습니다.

      임베디드에 관심이 많으시니... 한 번 pthread를 포팅해 보세요^^

      공개, cross-compile 툴들이 무료는 스레드를 지원하지 않았었는데^^ 한 3 ~ 5년 전...^^

      그 때쯤, pthread 때문에, cross compiler for arm 을 만들어 보려고 했는데, 실패했죠^^

      pthread source 분석 부탁 및 공개 부탁^^

      • morenice 2013.05.30 11:36 신고

        답글과 좋은 정보 감사드려요.

        나중에 안 사실이지만, linux에서 thread 또한 process 모델로 커널에서 다루고 있기 때문에 User Program에서 Clone을 사용합니다.

        임베디드 쪽에도 관심이 있지만 아직 자신감부족으로 많은걸 해보지 못하고 있습니다. 관련정보도 종종 올릴게요. ^^

        근데 계정에 링크된 웹사이트가 접속이 안되네요.
        -> http://iticworld.net/ 원래 url 맞죠?

Designed by Tistory.