쓰레드 종료 관련 질문입니다.

cococo의 이미지

음... 조금 찾아봤는데, 확실한게 안 보여서 질문합니다.

리눅스에서 , pthread_create()로 생성한 thread를 종료시킬 때,
pthread_exit(), pthread_cancel(), pthread_join(), pthread_detach() 에 관한 질문입니다.

1.만일 main()에서 pthread_create()로 생성한 thread를 종료시킬 때, 생성된 thread에서 pthread_exit()를 불러서 종료된다면 main()에서 pthread_join()을 다시 불러 줘야 되나요? (=pthread가 사용한 자원이 모두 해제되나요?)

1-1. 즉, 제가 이해하고 있는 건,
pthread_join()이나 pthread_detach()는 생성한 thread를 종료할 때 thread로 실행한 함수 안에서 thread_exit()를 call하지 않았을 때만 쓰는 걸로 알고 있거든요. 이거 제대로 이해하고 있는 건가요?

2. 바꾸어 말하면, pthread_create()로 생성한 thread를 종료할 때
2-1. 아무것도 안하고 thread가 부른 함수가 끝나게 냅두면( pthread_exit() 도 안 부르고, pthread_join()도 안 부르고... -_-; ), 리소스가 남아 있고.
2-2. main()에서 pthread_join()을 불러주고, thread로 부른 함수에서 암것도 안하면, 리소스 해제되서 깨끗이 종료되고.
2-3. main()에서 pthread_join()이나, pthread_detach()를 안 해도 thread로 불리운 함수에서 pthread_exit()를 불러주면, 역시나 리소스 해제되서 깨끗이 종료되고,
2-4. pthread_detach()를 쓰면, main()에서 pthread_detach()를 부른 시점에서 thread는 삭제되며, 리소스도 깨끗해 진다. 이때 thread로 불리운 함수가 pthread_exit()를 불렀던 안불렀던 상관없이, thread가 사용한 자원은 반환한다.

뭐...간단히 말하면, thread를 종료할 때 pthread_exit()만으로 충분한가, 혹은 pthread_exit() + pthread_join() or pthread_detach() 로 가능한가 하는 질문입니다.

그리고, pthread_cancel()의 개념이 안 서는데요,
만일 실행중인 스레드를 죽일라구 한다면, pthread_detach() 나 pthread_kill()로 죽이면 안 되는 건가요? pthread_cancel()이 아니면 프로세스가 생성한 모든 thread가 같이 죽어버린다는 내용을 검색에서 찾아서요.

책보고 대충 짜보고 검색 뒤져봤더니, 개념은 알겠지만 실제 써먹을 때 미묘한 부분을 확실히 모르니 문제가 되네요. 아시는 분 조언 부탁드립니다.
좋은 하루 되세요. =.=

익명 사용자의 이미지

exit()해도 join() 해야 합니다.

join()의 생활화~ 또는 detach()의 생활화~

또한 쓰레드를 죽일때는 스스로 죽게해야 함이 마땅합니다. 죽을 자리는 죽을 쓰레드가 판단하도록 코딩의 생활화~
(검색... 다시해보심이 좋을듯 합니다.)

검색으로 찾은 자료는 방대하나 쓸만한 내용을 찾는 것은 역시나 어렵다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.