레필리아
쓰레드(pthread_create, pthread_join)
레필리아
레필리아의 잡동사니
레필리아
전체
오늘
어제
  • 전체보기 (151)
    • 개발 공간 (1)
      • 매크로 (1)
    • 컴퓨터공학 리서치 (23)
      • 공개 (23)
      • 비공개 (0)
    • 컴퓨터공학 기초 (70)
      • Computer architectur.. (0)
      • Embedded system (6)
      • Operating system (0)
      • Database (2)
      • C.C++ (32)
      • Network (0)
      • Java (12)
      • 문제 풀이 (18)
    • 창고 (57)
      • 미분류 (57)
      • 유틸리티 (0)
      • 쓰레기통 (0)
      • ESLAB (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • MSP430F5437

최근 댓글

최근 글

hELLO · Designed By 정상우.
컴퓨터공학 기초/C.C++

쓰레드(pthread_create, pthread_join)

2011. 4. 3. 15:57

쓰레드(pthread_create, pthread_join)

 

헤더

#include  <pthread.h>

 

원형

int pthread_create(pthread_t * thread, const pthread_attr_t *attr,

                            void* (*start_routine)(void*), void *arg);

 

인자

첫번째 : 생성된 쓰레드의 ID를 저장할 변수의 포인터가 온다.

두번째 : 쓰레드의 특성을 설정할 때 사용되는데, 주로 NULL이 온다.

세번째 : 쓰레드가 생성되고 나서 실행될 함수가온다.(함수명도 주소값을 가짐으로 포인터로 볼수 있다.)

네번째 : 세번째 인자에서 호출되는 함수에 전달하고자 하는 인자 값

 

* 쓰레드는 main함수가 종료되면 자동으로 종료된다. 따라서 main에서 쓰레드가 종료될 때까지

   main의 종료를 기다려야 한다. 그때 pthread_join()을 사용한다.

 

원형

int pthread_join(pthread_t th, void **thread_return);

 

인자

첫번째 : 쓰레드 ID가 온다. 이 ID가 종료할 때까지 실행을 지연시킴

두번째 : 쓰레드가 종료시 반환하는 값을 받을 수 있다.

 

---------------------------------------------------------------------------------

----------------------test.c-------------------------------------------------------

----------------------------------------------------------------------------------

//thread
#include <pthread.h> //pthread_create(), pthread_join(), pthread_self()
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

//쓰레드에서 사용할 함수
void *t_function(void *data)
{
        int id;
        int i = 0;

        id = *((int *)data);

        while(1)
        {
                //thread 식별자 출력,
                printf("(%lu) %d : %d\n", pthread_self(), id, i);
                i++;
                if(i==5)
                return (void *)i;
                sleep(1);
        }
}

int main(void)
{
        pthread_t p_thread[2]; //thread ID 저장할 변수 2개
        int thr_id; //thread generation error check
        int status; //thread 종료시 반환하는 값 저장 변수
        int a = 1; //쓰레드 함수 인자
        int b = 2; //쓰레드 함수 인자

        //thread1 generation
        thr_id = pthread_create(&p_thread[0], NULL, t_function, (void *)&a);
        if(thr_id < 0)
        {
                perror("thread create error : ");
                exit(0);
        }

        //thread2 generation
        thr_id = pthread_create(&p_thread[1], NULL, t_function, (void *)&b);
        if(thr_id < 0)
        {
                perror("thread create error : ");
                exit(0);
        }

        //thread1이 종료될 때까지 main함수 종료를 기다린다. thread1이 종료시 반환하는 값 받는다.
        pthread_join(p_thread[0], (void **)&status);
        printf("return thread 0 %d\n", status);
        //thread2가 종료될  때까지 mian함수 종료를 기다린다. thread2가 종료시 반환하는 값 받는다.

        pthread_join(p_thread[1], (void **)&status);
        printf("return thread 1 %d\n", status);

        return 0;
}

==================================================================================

결과

'컴퓨터공학 기초 > C.C++' 카테고리의 다른 글

[DLL] DLL 만드는 방법 1  (0) 2011.09.08
cout 출력 포맷 설정하기  (0) 2011.07.28
함수 포인터와 void 포인터  (0) 2011.03.14
assert  (0) 2010.12.12
문자열 검색 함수 - strchr(), strrchr(), strstr(), strspn(), strcspn(), strpbrk()  (0) 2010.10.11
'컴퓨터공학 기초/C.C++' 카테고리의 다른 글
  • [DLL] DLL 만드는 방법 1
  • cout 출력 포맷 설정하기
  • 함수 포인터와 void 포인터
  • assert
레필리아
레필리아
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.