#include<pthread.h>
#include<stdio.h>
#include<unistd.h>
int ncount; // 쓰레드간 공유되는 자원
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // 쓰레드 초기화
void* do_loop(void *data)
{
int i;
for (i = 0; i < 10; i++)
{
pthread_mutex_lock(&mutex); // 잠금을 생성한다.
printf("loop1 : %d\n", ncount);
ncount ++;
if(i == 10){}
pthread_mutex_unlock(&mutex); // 잠금을 해제한다.
sleep(1);
}
}
void* do_loop2(void *data)
{
int i;
// 잠금을 얻으려고 하지만 do_loop 에서 이미 잠금을
// 얻었음으로 잠금이 해제될때까지 기다린다.
for (i = 0; i < 10; i++)
{
pthread_mutex_lock(&mutex); // 잠금을 생성한다.
printf("loop2 : %d\n", ncount);
ncount ++;
pthread_mutex_unlock(&mutex); // 잠금을 해제한다.
sleep(2);
}
}
int main()
{
int thr_id;
pthread_t p_thread[2];
int status;
int a = 1;
ncount = 0;
thr_id = pthread_create(&p_thread[0], NULL, do_loop, (void *)&a);
sleep(1);
thr_id = pthread_create(&p_thread[1], NULL, do_loop2, (void *)&a);
pthread_join(p_thread[0], (void *) &status);
pthread_join(p_thread[1], (void *) &status);
status = pthread_mutex_destroy(&mutex);
printf("code = %d", status);
printf("programing is end");
return 0;
}
void *를 반환한다고 만들었으니까 반환해야 할 거 아냐.
블로그에서 퍼온건데... 후 뭘반환해야하지.. 그냥 뮤텍스 락하고 언락보려고 한건데 제대로 되지도않음;
반환값은 pthread_exit 호출하는 것과 의미 같고, pthread_join한 쪽 (있으면)에 넘겨지는 값인데, 딱히 필요없으니까 그냥 0 반환해.
근데 저렇게 락, 언락 걸어 놓는데 락,언락 안하는거랑 결과값이 같은데.. 뭐가 잘못된거야?
코드를 뚫어지게 살펴봐라