Thread에서 이상한점

smiles77의 이미지

쓰레드에 관해서 이상한 점이 있어서 이렇게 질문을 하게되었습니다.
우선 코드를 보시고
void *Thread(void *obj)
{
pthread_t tid = pthread_self();
pid_t pid = getpid();
printf("pid -%d tid - %d\n", tid, pid);
while(1);
return (void *)1;
}

int main()
{

pthread_t threadID;
pthread_create(&threadID, NULL , Thread, NULL);
pthread_t tid = pthread_self();
pid_t pid = getpid();
printf("pid -%d tid - %d\n", tid, pid);
while(1);

return 1;
}

이 프로그램을 실행시, 제가 공부한 책(APE 2판외 각종 유닉스, 리눅스 관련서적들)에 의하면 두개에 쓰레드가 돌고 있어야합니다. 메인쓰레드와 그 메인쓰레드에서 만들어진 Thread()함수의 쓰레드입니다. 그러나 제가 ps로 확인해본 결과 3개의 프로세스가 돌아가고 있더군요. 메인쓰레드와 Thread()함수로 돌아가는 쓰레드 사이에 하나가 끼워져 있더군요. 이 관계는 부모프로세스 값으로 확인한 겁니다. 그럼 그 중간의 끼워져 있는 쓰레드의 존재가 궁금해집니다. 그리고, Thread()함수에서 while(1)을 제거하면 그 쓰레드는 zombie상태가 되어서 그 부모쓰레드가 pthread_join으로 리소스를 해제해야 된다고 책에 나와있는데, 그냥 없어져 버려서 pthread_join같은게 필요없어집니다. 그리고 그때에 중간에 끼워져 있는 쓰레드는 사라지지도 않습니다. 이런부분에 대해선 책에 없으니 답답하네요, 예제도 초간단한건데, 원래 그런것인지, 책이 잘못된건지, 제가 잘못된건지 알고 싶습니다.

kimsk99의 이미지

1. 추가 thread
single thread 프로그램으로 돌리더라도 몇개의 thread가 생성될 수 있습니다.
이건 OS에서 자체적으로 만들어 내는 thread로 System call 처리등 다양한 용도로 사용될 수 있습니다.
OS가 만들어 내는 것이니 무시 하셔도 됩니다.

2. 좀비 thread
pthread 표준에서 join을 해서 해제를 하지 않았을 때의 행동은 undefined일 것입니다.
ps로 thread가 남아있는것이 확이되어야 한다고 규정되어 있는 것은 아니지요.
보통 이런경우에 대한 처리는 각 OS의 구현 방법에 따라서 달라지는데 join으로 종료를 처리해 주지 않아도 크게 문제되지 않습니다.
일부 자원이 해제 되지 않을 수 있지만 큰 용량이 아니기 때문입니다.
물론 thread가 지속적으로 생성되었다 파괴되어야 하는 환경이라면 큰 문제가 되겠지만 주로 thread pool구조를 사용하기 때문에 정리하지 않아도 큰 문제는 없습니다.

댓글 달기

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