게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
쓰레드 동기화에 대한 질문입니다!!
게시물ID : programmer_9424짧은주소 복사하기
작성자 : QUARTZ
추천 : 0
조회수 : 678회
댓글수 : 5개
등록시간 : 2015/04/18 11:03:46
안녕하세요 !
운영체제 공부중인 학생입니다.
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함수를 써서 동기화를 제어해야 하는 이유가 무엇인지 궁금합니다.
전체 추천리스트 보기
2015-04-18 11:17:23추천 0
고치신 코드를 보면..
쓰레드는 3개 만드시는데.. (maing 함수  쓰레드까지 총 3개)
결국 쓰레드를 이용해서 득보 효과가 전혀 없네요.(멀티 쓰레드를 활용한.)
멀티 쓰레드를 하려고 하는거 아닌가요?
댓글 0개 ▲
2015-04-18 11:24:56추천 1
뮤텍스는 두개 이상의 쓰레드가 전역자원에 동시에 접근하는 상황을 막기 위해서 사용합니다. 본문에서 쓰레드를 저렇게 쓴 이유는 예제로써 뮤텍스가 필요한 상황을 보여주기 위해 동기화 문제가 발생하는 부분을 인위적으로 만들어 준 것 입니다.
댓글 0개 ▲
2015-04-18 11:33:51추천 1
간단한 예로 프린터를 출력하는 경우를 생각해 보겠습니다.
메인 쓰레드에서, 직접 프린터로 데이터를 보내는 경우 출력이 끝날 때 까지 프로그램이 정지하게 됩니다. 따라서 쓰레드를 만들어서 프린터로 데이터를 보내게 되는데요. 이 경우 아래와 같이 2개의 쓰레드가 동작하게 될 것입니다.
main thread - UI 담당
print thread - 프린트 담당
여기에 프린터의 동작 상태를 표시하기 위해 아래와 같은 전역변수를 추가합니다.
BOOL printIsRun = false;
print thread의 함수는 대략 아래와 같이 생각해 볼 수 있습니다.
void print_thread(void *param) {
if(printIsRun == ture) {
//쓰레드의 중복 실행을 방지
return ;
}
printIsRun = true;
//프린트작업
PrintRun();
printIsRun = false;
}
댓글 0개 ▲
2015-04-18 11:37:59추천 1
이 경우에는 글쓴이가 제시한 해법인 thread_join()을 이용한 동기화는 사용할 수 없습니다. thread_join을 기다리는 동안 main 쓰레드의 UI가 정지해 버리기 때문이죠. 그런데 만약 사용자가 인쇄 버튼을 매우 빠르게 눌러서 printIsRun = true 가 되기 전에 또 하나의 쓰레드가 실행되어 if(printIsRun == true) 조건문을 통과해 버린다면 어떤 일이 일어날까요? 개발자의 의도와 다르게 2개의 쓰레드가 동시에 실행되어버리는 문제가 발생할 것입니다.
이러한 문제를 해결하기 위해 사용하는 기법이 뮤텍스 입니다
댓글 0개 ▲
2015-04-18 22:10:55추천 0
달빛연구자님// 감사합니다!! 예를 들어서 설명해주시니 왜그런지 확 와닿네요!
댓글 0개 ▲
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호