Search
Duplicate
⚙️

[운영체제] Thread 와 Mutex의 개념과 관련 함수

간단소개
thread와 mutex의 개념과 컨트롤 함수 소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Operating System
Scrap
태그
thread
mutex
9 more properties

Thread

개요

쓰레드란?
쓰레드간 메모리 공유

관련 함수들

Thread 생성 함수: pthread_create()
자신의 tid를 알려주는 함수 pthread_self()
자신의 Thread를 종료하는 함수: pthread_exit()
다른 Thread 종료시키는 함수: pthread_cancle()
다른 Thread 의 종료를 기다리고 reap하는 함수: pthread_join()
Thread에 signale을 보내는 함수: pthread_kill()

Thread 종류 (joinable)

Joinable thread (default)
다른 쓰레드가 reap할 수 있고, 다른 쓰레드에 의해 reap 될 수 있다.
다른 쓰레드가 reap하기 전까지는 메모리가 해제되지 않는다.
detached thread
다른 쓰레드가 reap이나 종료할 수 없다.
쓰레드 종료시 자동적으로 메모리가 해제된다.
int pthread_detach(pthread_t thread) 로 detach할 수 있다.

Thread Synchronization - Mutex

개요

쓰레드간에 전역변수를 공유하기 때문에 전역변수에 동시에 접근할 경우 충돌이 발생할 수 있다.
Critical section
공유되는 메모리에 접근하는 코드를 명칭
같은 메모리를 두고 경합하는 critical section은 반드시 여러 쓰레드에서 동시에 실행되지 않게 해야 한다.
Mutual exclusion
Critical section에 대한 독점권을 부여하는 것
어떤 쓰레드가 critical section에 진입했을 때, 동일한 자원에 대한 critical section에 다른 쓰레드의 접근을 막아주는 것
Mutex
쓰레드 동기화를 구현하는 것을 뜻한다.

Mutex 변수

Mutex 생성과 초기화

static 생성
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
C
복사
생성할 경우 PTHREAD_MUTEX_INITIALIZER값으로 초기화된다.
반드시 위의 값으로 초기화 해주어야 한다.
dynamic 초기화
int pthread_mutex_init( pthread_mutex_t *mutex // mu pthread_mutexattr_t *attr)
C
복사
코드 실행중 어디서든 원하는 값으로 mutex를 초기화 할 수 있게 해주는 함수
return: 성공시 0, 실패시 error code

Mutex destory

int pthread_mutex_destroy( pthread_mutex_t *mutex) //제거할 뮤텍스의 포인터
C
복사
mutex의 주소에 담긴 mutex 변수를 삭제한다.
return: 성공시 0 실패시 error code

Mutex lock

int pthread_mutex_lock( pthread_mutex_t *mutex)
C
복사
mutex 변수의 상태를 확인하고 unlock 상태라면 lock 으로 바꾸어주고, 이미 lock 상태라면 unlock 상태가 될 때 까지 쓰레드가 sleep을 한다.
return: 성공시 0 실패시 error code
int pthread_mutex_trylock( pthread_mutex_t *mutex)
C
복사
mutex_lock과 같으나 이미 mutex 가 lock 상태라면 sleep에 들어가지 않고 다음 으로 계속 진행한다.

Mutex unlock

int pthread_mutex_unlock( pthread_mutex_t *mutex)
C
복사
mutex 변수를 lock 상태에서 unlock 상태로 변경해주는 함수이다.
return: 성공시 0 실패시 error code
여러 쓰레드가 한 mutex를 두고 sleep 중일때 우르르 깨우고 경합을 시키게 되어 이때 누가 차지하는가를 두고 문제가 발생하기도 한다.