스레드는 프로그램 내에서 제어의 단일 순차 흐름이다 .
main() 함수에서부터 프로그램이 순차적으로 실행되면서 main() 함수가 종료되면 프로그램도 종료되는것은 단일 스레드 모델이다
멀티 스레드를 사용하면 프로그램은 main() 함수뿐만 아니라 추가적인 실행 흐름이 있는 것으로 여러 방향에서 순차적으로 프로그램이 실행된다
1 2 3 4 5 | #include <pthread.h> int pthread_create(pthread_t *thread, const 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 |