• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

pthread_create() 함수 이용했을 때, thread가 두번 호출되는 것 처럼 나타납니다. 왜 그런것인가요?

22.12.05 13:18 작성 조회수 223

0

#include<stdio.h>

#include<stdlib.h>

#include"pthread.h"

void thread(void vargp);

void main()

{

pthread_t tid;

pthread_create(&tid,NULL,thread,NULL);

//pthread_join(tid,NULL);

printf("End of main\n");

exit(0);

}

void thread(void vargp)

{

printf("thread is created!:%lu\n",pthread_self());

return NULL;

}

 

결과가 3가지로 나타납니다.

  1. End of main

     

  2. End of main

    thread is created!:thread is created!:140319790982912

  3.  

  4. End of main

    thread is created!:140328472020736

    thread is created!:140328472020736

 

답변 1

답변을 작성해보세요.

1

안녕하세요 smile2000님

fork()와 마찬가지로 thread를 생성한 후 join으로 기다려주지 않으면 그냥 지나가버릴 수도 있습니다. 혹은 운좋게 thread가 생성될 수도 있습니다. 한마디로 결과를 예측하기 어렵게 됩니다. 그래서 결과가 여러 가지 형태로 나타나는 것입니다.

1번 결과는 thread가 생성/실행되지 않고 메인 코드가 종료된 경우이고,
2번 결과는 thread가 생성/실행된 후 메인 코드가 종료된 경우입니다.
3번의 결과는.. 저도 원인을 잘 모르겠습니다.ㅠ

실험 정신이 뛰어나신 것 같습니다. :) 기대하신 답변드리지 못해 죄송합니다.ㅠ

 

smile2000님의 프로필

smile2000

질문자

2022.12.07

네- 설명 감사합니다.