쓰레드(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 |