티스토리 뷰

728x90

 

스래드 동기화

동일한 프로세스 내부에 생성된 스래드들은 병행적으로 실행되며 자원(프로세스의 코드 영역과 데이터 영역)공유한다. 따라서, 임계 영역의 문제(결정성)를 해결하기 위한 동기화 기법이 필요하다.

 

 

스래드 동기화 기법

1) 스래드 뮤텍스(mutex): 공유 자원의 개수가 오직 하나일 경우에만 사용.

2) 스래드 세마포어(semaphore): 공유 자원의 개수가 하나거나 그 이상일 경우에도 사용 가능

 

* 표준 라이브러리가 아님으로 컴파일링시 –lpthread를 반드시 첨가해야 한다. (ex: $gcc thread.c –o thread –lpthread)

 

 

 

1) 스래드 뮤텍스(mutex):

뮤텍스(mutexes)“MUTual Exclusion locks”의 약자이다.

공유 자원에 대한 상호 배제적 접근을 허용한다.

 

사용법

뮤텍스 타입 변수를 선언한다. (ex: pthread_mutex_t mutex;)

변수의 속성을 초기화한다. (ex: pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutex_init(&mutex, &attr;)

뮤텍스 변수에 잠금을 시도한다. (ex: pthread_mutex_lock(&mutex); )

뮤텍스 변수의 잠금을 해제한다. (ex: pthread_mutex_unlock(&mutex); )

 

 

 

2) 스래드 세마포어(semaphor)
네덜란드 사람 Dijkstra가 제시한 방법으로, 세마포어는 초기 값을 부여한 후 P(Proberen), V(Verhogen) 연산자에 의해서만 변경이 가능한 정수형 변수.

사용법
① 세마포어 타입 변수를 선언한다. (ex: sem_t s; )
② 변수의 초기 값을 부여한다. (ex: sem_init(&s, 0, 5); 초기값=자원의 갯수(5))
③ P, V 연산을 시도한다. (ex: sem_wait(&s); sem_post(&s);)

 

P(S) 연산(S 값이 0이면 대기상태로 전환)
sem_wait(S) : 
if (S == 0) then block(); 
S = S – 1;

V(S) 연산(S 값이 1이고, 대기상의 스래드가 존재하면 대기상태 스래드 중에서 하나를 준비상태로 전환)
sem_post(S) :
S = S + 1;
if((S == 1) && (waiting_threads)) then wakeup(t);

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
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
글 보관함