안녕하세요 !
운영체제 공부중인 학생입니다.
concurrent program에 관련 문제에 대해 질문 드립니다
int Gv;
void* AddGv (void *ptr)
{
Gv = Gv + 1;
pthread_exit(0);
}
int main()
{
pthread_t th1, th2;
Gv = 0;
pthread_create (&th1, NULL, AddGv, NULL);
pthread_create (&th2, NULL, AddGv, NULL);
pthread_join (th1, NULL);
pthread_join (th2, NULL);
printf("Result = %d\n",Gv);
return 0;
}
라는 코드에서
쓰레드간 동기화문제 때문에
Result가 2가 나오지 않을 경우를 배제하기 위한 코드를 제시하는것이 문제입니다.
그런데 굵게 표시된 부분에서 pthread_join 함수를 이용하면 해당 쓰레드가 종료될때까지 코드가 진행되지 않으니
pthread_create (&th1, NULL, AddGv, NULL);
pthread_join (th1, NULL);
pthread_create (&th2, NULL, AddGv, NULL);
pthread_join (th2, NULL);
로 단순히 고치면 되는것 아닌가요??
굳이 mutex함수를 써서 동기화를 제어해야 하는 이유가 무엇인지 궁금합니다.