반응형

Posix Thread


 UNIX 기반 OS 시스템에 API로 정의되어있는 Thread이다.


Pthread


 유닉스 시스템상에서 표준 스레드이다.

 다른 종류의 스레드들도 많지만 호환성의 이유때문에 Pthread로 만든다.

 

*** thread이용 시, 리눅스에서는 ***


gcc -o thread thread.c -lpthread 를 뒤에 꼭 적어주어야 한다.



Pthread를 만드는 함수 ( #include <pthread.h>에 있다.)


pthread_create()


형식

int pthread_create(pthread_t *threadID, const pthread_attr_t *attribute, void *startRoutine, void *argumentPointer);


인자 설명

threadID :: 새로운 스레드의 ID가 threadID에 저장된다. 즉, 스레드가 만들어지면 TID가 포인터로 반환된다.

attribute :: 생성된 스레드의 특성을 정의하기 위해 사용한다. 보통 null을 준다.

startRoutine :: 스레드를 실행하는 함수 포인터이다.

argumentPointer :: 스레드 함수가 실행될 때 넘어가는 매개변수이다. 어떤 argument를 줄 지 모르니 보통 void *로 쓴다.


리턴 값

성공시 :: 0 

실패시 :: 0이 아닌 다른 값


부모 스레드가 자식 스레드를 기다리는 과정


pthread_join()


- 부모 스레드를 자도록 만들고, 자식 스레드가 행동을 취한다.

- 자식스레드가 끝이나면 부모 스레드가 움직인다.


형식

int pthread_join(pthread_t threadID, void **thread_returnValuePointer);


인자 설명

threadID :: 기다리고자 하는 자식 스레드 ID

thread_return :: 자식 스레드 종료 후 반환하는 값


부모 스레드는 자식 스레드에게서 return 값을 받게 되는데 

스레드 함수에서 반드시 리턴을 해야되기에 리턴 할게 없으면 return NULL을 한다.



다음 게시물에서는 이를 이용한 소스 코드를 만들어 보고, 결과 화면을 통해 분석을 해보도록 한다.



부모 스레드에서 현재 스레드를 떼어내어 OS가 관리하도록 하는 과정


- 스레드를 떼어내는 과정이다.

- join 과정이 따로 필요없다.

- detach된 스레드가 종료 시, 자동으로 OS에 메모리를 반납한다.





pthread_detach()


형식

int pthread_detach(pthread_t threadID);


인자 설명

threadID :: 떼어내고자 하는 TID


0을 리턴시 성공, 그 외에는 에러이다.

반응형