[완료] Thread Checker?

peccavi의 이미지

안녕하세요.

아래 링크에 소개된 프로그램과 같은 일을 해주는 공개소프트웨어가 있으면 소개좀 부탁드립니다.

http://www.xlsoft.com/kr/products/intel/Threading_Tools/reseller_productpage_thread_checker_linux.html#Features

작업하는 프로그램에서 데드락이 발생하는것 같은데.. 지쳐갑니다.. 막막하네요.

답변좀 부탁드립니다.

익명사용자의 이미지

힘드시겠네요.

쓰레드가 접근하는 Synchronize 객체인 Mutex에 대해서

Ordering이 지켜지는지 먼저 확인해 보십시요.

하나의 쓰레드가 2개 이상의 Mutex를 동시에 잡는 것으로 보이는데요,

만일 Ordering에 대한 가이드 라인이 없으시다면, 끝나지 않는 전쟁을

하고 계신겁니다.

제 팀에서는 이러한 것들을 검증하기 위해서 mutex를 잡는

로직에 대해서 pseudo code로 itemize를 해서

각 mutex에 대해 번호를 매기고,

쓰레드가 이러한 mutex에 대해서 hold할 수 있는 가능성에 대해서

순서대로 번호를 기입합니다.

예를 들면, 해당 시스템에 1, 2, 3, 4 라는 mutex가 있고(더 많겠지요?)

1 logic : 1 2(hold) | 2 1(release)
2 logic : 1 3 | 3 1
3 logic : 2 3 | 3 2
4 logic : 2 1 | 1 2

이렇게 결과가 나왔다면, 1번 로직과 4번 로직에 의해서 deadlock이 발생할

수 있는 경우입니다.

이러한 문제는 테스팅 툴로 해결될 것이 아니고, 로직을 자세히 review하셔야

할 것으로 보입니다.

건투를 ...

김성진

peccavi의 이미지

급한 마음에 툴을 찾았지만, 역시나 해답은 code review일것 같습니다.

편한 마음으로 하나씩 훑어보고 있는데, 네트웍과 연관된 상황이라 쉽게 잡힐것 같지는 않네요.

일단 돌아가는 코드에 말씀하신것과 비슷한 로그를 추가해 올려놨습니다.

좋은 결과가 있기를 바래야죠.

주신 의견 감사드립니다~

----
jai guru deva om...

----
jai guru deva om...

inbon의 이미지

현제 운영중인 배포판이 RedHat 9 이상이시라면

POSIX Thread가 NPTL일겁니다.

아래에 NPTL Trace tool 사이트를 링크합니다.

http://sourceforge.net/projects/nptltracetool/
http://nptltracetool.sourceforge.net/

이 툴을 이용하면 아래와 같은 루틴들을 trace 할 수 있습니다.

pthread_create
pthread_join
pthread_cancel
pthread_cond_init
pthread_cond_wait
pthread_cond_signal
pthread_cond_broadcast
pthread_cond_destroy

pthread_mutex_init
pthread_mutex_lock
pthread_mutex_unlock
pthread_mutex_destroy
pthread_barrier_init
pthread_barrier_wait
pthread_barrier_destroy

sem_init
sem_open
sem_unlink
sem_post
sem_wait
sem_trywait
sem_destroy

이 툴이 도움이 된다면 좋겠네요.

리눅스 스레드 race condition 디버깅이 제 관심분야입니다. ^^

==================
In-Bon Kuh
http://inbon.net

GNU OSLab.
http://race.gnu.kr

====================
In-Bon Kuh
http://inbon.net

GNU OSLab.
http://race.gnu.kr
====================

peccavi의 이미지

시간이 촉박하다보니, 결국 문제를 일으킬만한 두개의 스레드를 하나의 스레드로 통합하고

mutex를 제거했습니다.

NPTL Trace tool도 다시 살펴봐야겠네요.

답변주신 두분 감사드립니다.

----
jai guru deva om...

----
jai guru deva om...

댓글 달기

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