본문 바로가기
dev/Linux

Linux 쓰레드 (threads)

by Kyulee 2021. 9. 12.
반응형

1. Multi-threaded program 을 하는 이유

  • 빠른 실행
    • 프로세스를 새로 생성에 드는 비요을 절약
  • 데이터 공유
    • 파일, Heap, static, Code의 많은 부분을 공유
  • CPU 보다 효율적으로 활용
    • 코어가 여러 개일 경우 코어에 thread를 할당하는 방식

장점

  • 대량의 데이터 처리에 적합
    • CPU 자원을 효율적으로 사용
    • 멀티 프로세스 방식에 비해서 빠른 thread 생성
  • 데이터 교환이 쉬움
    • IPC(inter process communication)를 사용하지 않고, 데이터를 교환할 수 있음.

단점

  • 프로그래밍 난이도 상승
    • 비직관적
    • 문핵의 흐름을 예상하기 어려움
  • 디버깅이 어려움
  • 제대로 만들기가 어려움
    • 병렬 프로그래밍, 공유 자원 관리는 높은 기술 숙련도를 요구

 

2. POSIX Thread : pthread

POSIX 스레드는 병렬적으로 작동하는 소프트웨어의 작성을 위해서 제공되는 표준 API다.

  • POSIX 표준을 따르는 pthread
    • Multi thread 프로그래밍을 위한 API를 제공
  • 뛰어난 호환성
    • 윈도우를 제외한 모든 Unix계열 운영체제를 지원
  • CPU 각 벤더에서도 독자적인 thread API를 제공
    • pthread에 비해서 뛰어난 성능을 보여주지만,
    • 이식성과 유지/보수 상의 문제로 대부분 pthread를 이용

※ 컴파일을 할 때 -pthread을 추가

Thread 생성

#include <pthread.h>
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
  • thread : pthread_t structure
  • attr : pthread_attr_t structure
  • start_routine : thread 함수
  • arg : thread 함수로 넘길 매개 변수

pthread_join : threads가 끝날 때까지 기다림

#include <pthread.h>
int pthread_join(pthread_t thread, void **value_ptr);
  • 해당 thread가 종료할 때까지 대기
  • thread : pthread_t structure
  • value_ptr : return value pointer

pthread_detach : 메인 thread와 분리해서 동작

#include <pthread.h>
int pthread_detach(pthread_t thread);
  • 해당 메인 thread로 부터 분리함
  • thread 종료와 동시에 자원 회수

3. thread Mutex 

mutex init & destory

#include <pthread.h>
pthread_mutex_t mutex;

int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
// pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;


int pthread_mutex_destory(pthread_mutex_t *mutex);

mutex lock & unlock

#include <pthread.h>
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);

 

 

 

 

반응형

'dev > Linux' 카테고리의 다른 글

Linux 소켓 (socket)  (0) 2022.01.12
Linux 프로세스 (Process)  (0) 2021.09.10
Linux 파일 전송 및 가져오기 SCP 명령어 ( & zip)  (0) 2021.09.04