스레드는 프로그램 내에서 제어의 단일 순차 흐름이다 .

main() 함수에서부터 프로그램이 순차적으로 실행되면서 main() 함수가 종료되면 프로그램도 종료되는것은 단일 스레드 모델이다 

멀티 스레드를 사용하면 프로그램은 main() 함수뿐만 아니라 추가적인 실행 흐름이 있는 것으로 여러 방향에서 순차적으로 프로그램이 실행된다 

1
2
3
4
5
#include <pthread.h>
 
int pthread_create(pthread_t *threadconst pthread_attr_t *attr,
                    void *(*start_routine)(void *), void *arg);
 
cs


첫 번째 인자는 pthread가 성공적으로 리턴이 되면 새로 생성되는 스레드의 스레드ID가 이 포인터가 가리키는 버퍼에 저장될 주소값이다.

두 번째 인자는 스레드의 옵션을 지정할때 사용되는 값인데 기본 옵션으로 스레드를 생성하기 위해서는 NULL 값을 전달하면 된다 .

세 번째 인자는 스레드가 수행할 함수의 포인터를 전달하면 된다

네 번째 인자는 세 번째 인자를 실행할 때 전달해 줄 매개변수이다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
 
void *thread_function(void *param)
{
        while(1) {
                printf("%s\n" , (char*)param);
                sleep(1);
        }
}
 
int main()
{
        pthread_t thread_id;
 
        char *msg = "hi";
 
        pthread_create(&thread_id, NULL, thread_function, msg);
 
        while(1){
                printf("hello!\n");
                sleep(1);
        }
        return 0;
}
 
cs

5행에서 void *을 사용해주는 이유 
어떤 타입을 가진 변수를 전달해야할지 알 수 없으므로 void형으로 통째로 준다

또한 포인터를 이용해서 main에 전달하는 이유는 call by Reference를 참고한다

'c언어' 카테고리의 다른 글

동적 메모리 할당과 해제  (0) 2016.08.10
ANSI C 표준 함수  (0) 2016.08.10
구조체 배열 포인터 중얼-1  (0) 2016.08.10
void형 포인터  (0) 2016.08.09
구조체  (0) 2016.08.08

+ Recent posts