쓰레드 종료시키는 것에 대한 조언을 구합니다.

muzie의 이미지

안녕하세요, 현재 몇개의 멀티쓰레드로 도는 네트워크 프로그램을 개발중입니다.

어떤 한 루틴을 짜는 동안 문제가 생겨서..조언을 듣고자 질문 올립니다.

먼저 하나의 구조체가 있습니다.
이 구조체는 월/화/수/목/금/토/일 에 따라 각각 다른 데이터로 업데이트 됩니다.

그리고 이 구조체의 그 데이터를 참조하여 또다른 특정 요소일때마다
어떤 작업을 수행을 하는 쓰레드가 있습니다.

문제가 되는것은 요일별에 따른 데이터 업데이트시입니다.
하루가 지나 데이터가 업데이트 되었을때 데이터 자체의 내용이 바뀌었으므로
다시 정확한 데이터를 참고하기 위하여
쓰레드를 죽였다가 살리거나, goto 문등으로 다시 처음으로 빠져나간다거나 해야하는데
이게 정석적인 방법이냐? 하는 것이 제 의문입니다.

쓰레드 내부에 분기하는 곳도 많아서 이 "업데이트가 되었다는 정보"를 다루면서
쓰레드를 죽이거나 살리거나 하는것이 정상동작을 보장되지는 않고 있다는 느낌이 조금 있습니다.

업데이트가 되는 그 순간 쓰레드를 아예 없애버리거나 하기엔 너무 위험부담이 크기도 하구요.

조언 부탁드리겠습니다. 감사합니다.

jos77의 이미지

thread 죽일 때 waitpid 잘 쓰시고 계시다면 알아서 leap 될 거긴 하지만 프로그램 종료 전까지 전부 zombie 가 되겠군요 (os - linux/unix 죠?)
그보다 메모리 해방안된 상태에서 강제로 죽이는 거라면... thread 자체에서 malloc 안 쓰고 있다면 괜찮긴 하겠지만... 좋은 상황은 아니죠. 종료 루틴 만들어주세요 goto 는 위험하니 모든 함수 분기점에서 if (checkupdate()) return 0 (혹은 thread_exit=true); 넣어주면 되겠네요... 그보다 이런 실시간 업데이트를 하는 프로그램이라면 GUI 아닌가 싶은데 환경이 어떤지요?

-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr

muzie의 이미지

OS는 linux 입니다. 임베디드 환경으로 6410 기반으로 돌고 있구요.
GUI환경은 아닙니다. 정확히는 영상통화 관련된 프로세스 작성중이고... DB(sqlite)값을 처리해야하는 과정에서 생기고 있는 문제네요. 뭐 이번뿐만이 아니라 이전에 프로그램 만들때 한두번씩은 꼭 발생하는 문제였기에, 다른 분들은 어떻게 해결하고 계신지, 제 방법에 문제가 없는지 궁금해서 여쭤보았습니다. :)

흠.. cond_timed_wait으로 모니터링하면서 죽이려고 했는데도..안걸리는군요 :(

bushi의 이미지

pthead_cleanup_push()/pthread_cleanup_pop() 과 pthread_cancel() 같은 걸 원하는 건가요 ?
도대체 "문제"가 뭔지, "제 방법"이라는 건 뭔지 글만 읽어선 모르겠습니다.

OTL

xfree의 이미지

요일별 데이터 업데이트시 쓰레드들을 관리할 수 있는 쓰레드 메니저가 있어서
각각의 쓰레드들을 동기화시켜야 할것 같구요.

그러기 위해서 각각의 쓰레드들은 자신의 상태를 보관하고 있어야 할것 같습니다.

댓글 달기

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