mutex lock의 유무에 따른 동작 차이 확인 (c언어, linux)

2023. 6. 9. 01:24시스템프로그래밍

이 글에서는 pthread를 동작시키면서 각 스레드 별로 구구단(2단, 3단)을 동작시킨다.

 

그리고 동작을 진행하면서 mutex lock을 걸었을 때의 결과와 걸지 않았을 때의 결과를 확인한다.

 

사용한 코드
1 #include<stdio.h>
2 #include<pthread.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5
6 pthread_mutex_t mutex;
7
8 void *count(void* arg);
9
10 int main(){
11 pthread_t thread1, thread2;
12
13 pthread_mutex_init(&mutex, NULL); // mutex 초기화
14
15 pthread_create(&thread1, NULL, count,(void*)2); // 스레드가 동작시킬 함수에 2를 전달
16 pthread_create(&thread2, NULL, count, (void*)3); // 스레드가 동작시킬 함수에 3을 전달
17
18 pthread_join(thread1,NULL); // 스레드 실행
19 pthread_join(thread2,NULL); // 스레드 실
20
21 pthread_mutex_destroy(&mutex);
22 return 0;
23 }
24
25 void *count(void* arg){
26 int i;
27 int num = (int)arg;
28 pthread_mutex_lock(&mutex);// 여기를 주석처리
29 printf("%d\n",num);
30 for(i=1;i<10;i++){
31 printf("%d * %d = %d\n",num,i,num*i);
32 sleep(1);
33 }
34 pthread_mutex_unlock(&mutex);// 여기를 주석처리
35 }
 

 

결과

mutex lock 을 걸지 않았을 때 mutex lock 을 걸었을 때

 

이렇게 mutex lock을 사용하면 각 스레드의 동작이 단독으로 방해받지 않고 실행될 수 있다

 

그래서 mutex lock을 이용하면 공유 자원에 접근하게 되었을 때 공유 자원의 값들을 안전하게 사용할 수 있고 race condition 등의 문제점도 해결할 수 있게 된다.