Computer Security

#36 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습2) 본문

리눅스 시스템 프로그래밍

#36 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습2)

쿠리 Kuri 2022. 10. 11. 18:30
반응형

이전 시간에 이어서, 쓰레드가 생성된 이후에 공유자원을 놓고 mutex를 이용해서 동기화 할 수 있는 예제를 작성 해보자.

 

 

 

 

 

 


1.이전 시간의 코드이다.

thread.c

 

 

 

 

 


2. 공유자원이 되는 shared 전역 변수를 만들어준 뒤, shared라는 변수를 100만번동안 +1 하고 100만번동안 -1을 한다 해보자.

 

 

- 동기화 하지 않은경우

 

 

컴파일 결과)

./thread

큰 숫자로 반복하게 되면, 하나의 공유자원을 놓고 더했다 뺐다 하게될텐데 오동작이 될 수 있다.

 

 

 

 

 

 

 


mutex lock을 통해서 보호 해서 오동작이 나지 않도록 해보자.


3. instance 선언 후, mutex_init API를 이용해서 초기화 해준다.

mutex_init

 

 

 

 

 


4. 공유자원(critical section)에 진입할때는 lock을 하고 종료될 때는 unlock을 해주자.

lock, unlock

#include <pthread.h>

lock하는 API
int pthread_mutex_lock(pthread_mutex_t *mutex); 

lock을 시도하는 API(락x일 경우 바로잡음, 락o일 경우 바로 err리턴)
int pthread_mutex_trylock(pthread_mutex_t *mutex); 

unlock 하는 API 
int pthread_mutex_unlock(pthread_mutex_t *mutex); 


lock() ---> unlock()

 

 

 

 

 

 


5. 전체 코드이다.

thread.c

 

 

 

 

 

 


6. makefile을 이용해 컴파일 해준 뒤, 실행 시켜보자.

./thread

이번엔 동기화 하지 않았을 경우와 다르게, 정상적으로 출력 된 것을 알 수 있다!

 

반응형
Comments