[질문] 다중 스레드 돌리는 프로그램의 종료...

nTachyon의 이미지

main
└─ thread
└─ thread
└─ ...
└─ ...
└─ thread

위와 같은 구조의 프로그램에서...
모든 thread가 종료된 후에 main이 종료되게 하려면 어떤 방식으로 해야할지 궁금합니다.

main은 각 thread들을 생성도 하지만,
각 thread들에게 pthread_cancel()을 이용해 종료 사인을 주고, 모든 thread가 종료된 후에 exit하는 역할도 합니다.
(이렇게 하는 이유는, 각 thread들은 자신만의 cleanup 코드를 반드시 실행하고 죽어야 하기 때문에...)

그래서, 저는 main만이 signal을 처리할 수 있도록 signal handler를 등록해두고,
main에서 각 thread들에 대해 pthread_cancel 호출한 후에 일정 시간 sleep 후에(-_-;) exit 하도록 했습니다.

영 ~ 이상한데... 이런 상황이면 cond_wait 쓴다는 것도 아귀가 맞지를 않고...

다른 좋은 방법이 없을까요?

happyjun의 이미지

pthread_join()으로 안되는 이유가 있습니까?

----------------------------------------
http://moim.at
http://mkhq.co.kr

nTachyon의 이미지

제가 생각한 구조에서는 pthread_join으로 마냥 기다리기엔 뭐한것이...

- main은 모든 signal(종료 시그널 포함)에 대한 핸들러를 가지고 사용자가 종료하거나 기타 SIGSEGV 등의 신호 발생시에도 각 thread들을 직접 종료 시킨 후 exit 해야하며...

- 각 thread들도 본인의 작업 수행중에 종료해야 할 상황이 되면, main에게 통보 하여 다른 thread들까지 종료시켜야 합니다.

때문에 마냥... 각 thread들이 종료되기만을 무한정 기다리기엔 조금 힘든 점이...

IsExist의 이미지

스레들간의 변수 공유가 쉬우니 변수를 하나 만들어서 그걸로 스레드들이 바로보고
있다가 main 스레드가 on, off 하는걸로 하는게 좋을것 같습니다.

main이 thread 들을 봐라보는 변수 하나.
thread 들이 main을 바라보는 변수 하나.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

bejoy4him의 이미지

nTachyon wrote:
....
- main은 모든 signal(종료 시그널 포함)에 대한 핸들러를 가지고 사용자가 종료하거나 기타 SIGSEGV 등의 신호 발생시에도 각 thread들을 직접 종료 시킨 후 exit 해야하며...
...

답변은 아니구... SIGSEGV도 핸들링이 되는건가요?
내가 알기론 그 이벤트 같은 경우는 핸들링이 안되는 것으로 알고있는데.....

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.