#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;
}