×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 2,045,673명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)
반응형

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을 리턴시 성공, 그 외에는 에러이다.

반응형