스레드 01 기본

2021. 3. 12. 01:43Computer(인강)/시스템 프로그래밍

728x90
반응형

안녕하세요 bannavi입니다^ㅅ^

오늘은 스레드를 관리하고 생성하는 함수 기본에 대해 살펴보도록 하겠습니다

바로 시작하겠습니다

 

 

 

  Pthread스레드란?

 

# thread 표준 API

- POSIX 스레드 또는 Pthread(피-스레드)라고 부름

 

# Pthread API

- 저수준 API로 100여개의 함수 제공

- 복잡하지만, 유닉스 시스템 핵심 스레딩 라이브러리

- 다른 스레딩 솔루션도 결국 Pthread를 기반으로 구현되어 있으므로, 익혀둘 가치가 있음

 

 

리눅스의 C언어에서는 어떻게 Pthread를 쓸 수 있을까?

 

1. <pthread.h>헤더 파일에 정의

2. 모든 함수는 pthread_로 시작

3. 크게 두 가지 그룹

1) 스레드 관리: 생성, 종료, 조인, 디태치 함수 등

2) 동기화: 뮤텍스(상호배제)등 동기화 관련 함수

 

 

Pthread 라이브러리

기본 라이브러리(glib)와 분리된 libpthread 라이브러리에 pthread 구현되어 있으므로 컴파일시 명시적으로 -pthread 옵션 필요

 

이 코드를 컴파일 하기 위해서는 반드시 -pthread라는 옵션을 붙여주셔야 libpthread라이브러리를 사용해서 컴파일이 되게 되어있습니다.

 

 

스레드 생성

return값이 0이면 스레드가 생성이 되었다는 것이고, 그게 아니면 에러코드가 리턴되게 되어있습니다,

 

 

스레드 종료

프로세스 exit 시스템콜과 비슷하다.

 

 

스레드 조인

특정 스레드를 끝날때까지 다음코드로 넘어가지않고 기다려주게끔 하는 함수

상태값으로 받을 변수를 &status에 써주면 된다

status값을 출력해보면 해당 thread의 종료 상태값을 알 수 있다.

 

밑부분에 thread1,2적어놓은것.

'이 코드는 thread1또는 2가 끝날때까지 실행안되게끔 한 코드이다'

 

결과적으로 아래쪽 두줄 스레드는 100이 출력이 되야할텐데 그렇게 될까요?

 

코드를 컴파일할 때 pthread적어주어야하고요

둘다 0이 나왔으므로 성공적으로 실행이 됬다는것 알 수 있고요

pthread exit때문에 일어난것이고

pthread join을 통해서 일어난것이다.

728x90
반응형