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 등의 문제점도 해결할 수 있게 된다.
'시스템프로그래밍' 카테고리의 다른 글
lseek를 사용한 대용량 더미 파일 생성(c, linux) (0) | 2023.06.11 |
---|---|
Named pipe를 사용한 프로세스 간 양방향 채팅 프로그램 (0) | 2023.06.09 |