C에서 Thread를 구현하기 위해서는 pthread.h 함수를 사용해야 한다. 


기본적인 Thread 함수

pthread_create

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
  • 쓰레드 생성을 위해서 사용 
  • 첫번째 인자인 thread 는 쓰레드가 성공적으로 생성되었을때 생성된 쓰레드를 식별하기 위해서 사용되는 쓰레드 식별자 
  • 두번째 인자인 attr 은 쓰레드 특성을 지정하기 위해서 사용, 기본 쓰레드 특성을 이용하고자 할경우에 NULL 을 사용 
  • 세번째 인자인 start_routine는 분기시켜서 실행할 쓰레드 함수
  • 네번째 인자는 쓰레드 함수의 인자
  • 리턴값은 성공시 0, 실패시 0 이상의 수

예제 example_1.c

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

/* 쓰레드 함수 */
void *t_function(void *data)
{
    int id;
    int i = 0;

    id = *((int *)data);

    while(1)
    {
        printf("%d : %d\n", id, i);
        i++;
        sleep(1);
    }

    return;
}

int main()
{
    pthread_t p_thread[2];

    int thr_id;
    int status;
    int a = 1;
    int b = 2;

    /* 쓰레드 생성 인자로 1을 넘긴다 */
    thr_id = pthread_create(&p_thread[0], NULL, t_function, (void *)&a);
    if(0 < thr_id)
    {
        perror("thread create error : ");
        exit(0);
    }

    /* 쓰레드 생성 인자로 2를 넘긴다 */
    thr_id = pthread_create(&p_thread[1], NULL, t_function, (void *)&b);
    if(0 < thr_id)
    {
        perror("thread create error : ");
        exit(0);
    }

    /* 쓰레드 종료를 기다린다
     * 실행된 쓰레드에 대해서는 pthread_join 등의 함수를 이용하여 쓰레드가 종료될 때까지 기다려 주어야 한다.
     * pthread_join은 일종의 fork의 wait과 비슷하게 작동하며, 쓰레드 자원을 해제 시켜준다.*/
    
    pthread_join(p_thread[0], (void **)&status);
    pthread_join(p_thread[1], (void **)&status);
    
    return 0;
}


저작자 표시
신고

'컴퓨터 언어 > C' 카테고리의 다른 글

pThread를 이용한 Thread  (0) 2013.03.05
Static 변수  (0) 2013.02.25
메세지 기법  (0) 2013.01.16
배열의 이름은 첫번째 원소의 주소이다.  (0) 2012.12.20
문자열, 그것은 배열.  (2) 2012.06.11
Makefile을 작성하자.  (2) 2012.06.10