#include <pthread.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> // volatile 변수를 선언해서 lock으로 사용하는 예제 //volatile int lock = 0; pthread_mutex_t lock; int tot = 0; void sum(int id) { while(1){ //while(lock) { // usleep(100); //} //lock = 1; pthread_mutex_lock(&lock); // 다른 쓰레드에서 접근시 대기 for(int i = 0; i <= 100 ; i++) { tot += i; usleep(500); } printf("thread%d = %d\n", id, tot); tot = 0; //lock = 0; pthread_mutex_unlock(&lock); // 다른 쓰레드에서 진행할 수 있도록 해제 usleep(500); } } void* thread1() { sum(1); return NULL; } void* thread2() { sum(2); return NULL; } int main() { int status; pthread_t tid1,tid2; // mutex를 사용하기 위해 초기화 if (pthread_mutex_init(&lock, NULL) != 0) { printf("\n mutex init failed\n"); return 1; } pthread_create(&tid1,NULL,thread1,NULL); pthread_create(&tid2,NULL,thread2,NULL); pthread_join(tid1,NULL); pthread_join(tid2,NULL); /// mutex 삭제 pthread_mutex_destroy(&lock); return 0; }