본문 바로가기
한국으로/임베디드 리눅스

4.1 스레드란?

by 영킴. 2018. 6. 27.

4.1 스레드란?

4.1.1 POSIX 스레드

리눅스는 POSIX 표준인 POSIX 스레드(PThread)를 사용한다.
POSIX 스레드는 병렬적으로 작동하는 소프트웨어의 작성을 위해 제공되는 표준 API임.
스레드는 하나의 프로세스 내에서 동작을 여러 개 진행한다.

기본적으로 하나의 프로세스는 하나의 스레드를 갖고, 추가로 스레드를 생성하는 개념임.
스레드들은 하나의 프로세스 내의 자원을 공유함.

커널은 프로세스 단위가 아닌 이러한 스레드 단위로 관리 및 스케줄링한다. (커널 안에서는 태스크라는 용어 사용)
스레드는 개별적인 프로그램 카운터와 스택을 가지므로 독립적으로 실행하지만,
자원을 공유하기 때문에 동기화 문제가 발생한다.


4.1.2 스레드의 장단점

장점

쉬운 자원 공유
쉬운 스케줄링
작은 비용으로 구현

단점

동시성 문제 발생
까다로운 디버깅
스레드가 늘어날 수록 성능 저하
하나의 스레드 문제는 모든 프로세스의 문제



4.1.3 스레드 함수

int pthread_create(pthread_t* thread, const pthread_attr_t* attr, void* (*start_routine)(void*), void* arg);

기능: 새로운 스레드 생성
리턴: 성공 시 0, 실패 시 에러번호 리턴
thread: 스레드 ID
attr: 스레드의 속성 결정 (일반적으로 NULL)
start_routine: 스레드 루틴의 시작함수
arg: 스레드 루틴 시작함수의 인자

pthread와 관련된 API는 컴파일 시 -pthread 옵션을 통해 사용 가능

void pthread_exit(void* retval);

기능: 스레드 종료 (스레드 루틴에서 호출 가능)
retval: 메인 루틴에 전달할 데이터

int pthread_join(pthread_t thread, void** retval);

기능: 스레드 종료 대기 (메인 루틴에서 호출 가능)
리턴: 성공 시 0, 실패 시 에러번호 리턴
thread: 스레드 ID
retval: 스레드 종료 시 pthread_exit()가 전달할 데이터, 없으면 NULL



4.1.4 스레드 종료 조건

스레드 루틴에서 pthread_exit() 호출
스레드 루틴의 시작함수에서 리턴
스레드 루틴에서 exit() 호출 (exit()은 호출되면 무조건 프로세스 전체가 종료됨)
메인 루틴 종료

메인 루틴에서 pthread_cancel() 호출




'한국으로 > 임베디드 리눅스' 카테고리의 다른 글

5.3 메모리 관리  (0) 2018.06.29
5.2 시스템 콜  (0) 2018.06.28
5.1 프로세스 관리  (0) 2018.06.28
4.2 스레드 동기화  (0) 2018.06.28
3.4 메시지 큐  (0) 2018.06.27
3.3 공유 메모리  (0) 2018.06.27
3.2 세마포어  (0) 2018.06.27
3.1 파이프  (0) 2018.06.27