Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |
Tags
- 리눅스
- 알고리즘
- Windows10
- 학습
- 쉘
- 텐서플로우
- shell
- 영상처리
- OpenCV
- 프로그래밍
- 코딩
- c
- 프로세스
- 백준알고리즘
- 턱걸이
- TensorFlow
- 시스템프로그래밍
- 운영체제
- 딥러닝
- python
- Computer Vision
- error
- Windows 10
- C언어
- 회귀
- 백준
- CV
- 공부
- C++
- linux
Archives
- Today
- Total
줘이리의 인생적기
Pthread 본문
728x90
POSIX스레드라고 부르며, Pthread[피스레드]라고도 부른다.
pthread는 저수준 API로 100여개의 함수를 제공한다.
유닉스 시스템의 핵심 스레딩 라이브러리이다.
<pthread.h> 헤더파일에 정의되어 있으며, pthread_로 모든 함수가 시작된다.
스레드 관리(생성, 종료, 조인, 디테치)와 관련된 함수, 동기화(뮤텍스)와 관련된 함수를 주로 익혀두면 좋다.
기본 라이브러리(glibc)와 분리된 libpthread 라이브러리에 구현되어 있어서 컴파일시에 -pthread 옵션이 필요하다.
gcc -pthread test.c -o test
스레드 생성
pthread_t thread1;
void *thread_function(void *ptr);
ret = pthread_create(&thread1, NULL, thread_function, (void*)message1);
// 첫 번째 인자 : 해당 thread를 카리키는 포인터
// 두 번째 인자 : 스레드의 특정한 설정이 필요한 경우, 기본 NULL
// 세 번째 인자 : 해당 정의되어 있는 함수
// 네 번째 인자 : 해당 정의되어 있는 함수의 인자
// 리턴 값 0 : 생성
// 리턴 값 에러 : 실패
스레드 종료
pthread_exit(NULL);
// 첫 번째 인자 : NULL이나 0이면 정상 종료
스레드 조인
메인스레드에서 생성된 스레드들이 끝날 때까지 기다려주는 함수
(끝나기도 전에 메인스레드가 진행되면 안되니까)
스레드들의 종료와 상태값으로 추가 처리가 가능하다.
pthread_join(p_thread, (void *)&status);
// 첫 번째 인자 : 기다릴 스레드
// 두 번째 인자 : 상태 값
printf("thread join : %d\n", status);
스레드 디테치
해당 스레드가 종료될 경우 관련 리소스를 해제하는 함수
메인스레드는 해당 스레드가 끝날 때까지 기다리지 않는다.
조인과는 다르게 관련 리소스가 바로 해제되어 추가 처리가 불가능하다.
// 함수원형
int pthread_detach(pthread_t thread);
뮤텍스 선언, 초기화
pthread_mutex_t mutex_lock = PTHREAD_MUTEX_INITIALIZER;
뮤텍스 락 걸기, 풀기
// 함수 원형
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
'공부 > 시스템 프로그래밍' 카테고리의 다른 글
mmap (0) | 2021.12.31 |
---|---|
쉘 스크립트 (0) | 2021.12.27 |
tar (0) | 2021.12.24 |
시그널(signal) (0) | 2021.12.22 |
프로세스 우선순위 변경 (0) | 2021.12.20 |