리눅스 시스템 프로그래밍
#36 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습2)
쿠리 Kuri
2022. 10. 11. 18:30
반응형
이전 시간에 이어서, 쓰레드가 생성된 이후에 공유자원을 놓고 mutex를 이용해서 동기화 할 수 있는 예제를 작성 해보자.
1.이전 시간의 코드이다.
2. 공유자원이 되는 shared 전역 변수를 만들어준 뒤, shared라는 변수를 100만번동안 +1 하고 100만번동안 -1을 한다 해보자.
- 동기화 하지 않은경우
컴파일 결과)
큰 숫자로 반복하게 되면, 하나의 공유자원을 놓고 더했다 뺐다 하게될텐데 오동작이 될 수 있다.
mutex lock을 통해서 보호 해서 오동작이 나지 않도록 해보자.
3. instance 선언 후, mutex_init API를 이용해서 초기화 해준다.
4. 공유자원(critical section)에 진입할때는 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. 전체 코드이다.
6. makefile을 이용해 컴파일 해준 뒤, 실행 시켜보자.
이번엔 동기화 하지 않았을 경우와 다르게, 정상적으로 출력 된 것을 알 수 있다!
반응형