fsaas
45
2017-05-04 20:31:53
1
1969

mutex, 조건 변수를 이용한 생산자&소비자 문제


이번에 생산자 & 소비자 문제를 해결하는 문제를 과제로 받았는데 이해가 되지 않는 부분이 있어 질문드립니다. 

프레임은 위와 같은 구조인데 버퍼가 사용가능 한지를 확인할 때 왜 if문이 아니라 while문을 해야 하는 지 모르겠습니다.

아래는 제가 짠 코드인데, while(CQ_count == Q_SIZE)로 할 경우 정상적으로 출력되지만,

if(CQ_count == Q_SIZE)로 할 경우 어떠한 이유에서인지 dead lock이 걸리기도 하고, 버퍼가 꽉 찬 상태인데 wait를 하지 않아 경고문을 출력하였습니다.

그런데 한 번 wait가 걸리고, signal을 받아 깨어나면 lock을 호출하는 걸로 아는데, 그럼 다른 쓰레드들은 접근 못하기 때문에 while문으로 계속 조건 검사를 할 필요 없이 if문으로 한 번만 검사 하면 되는 게 아닌가요?? 설마 wait가 깨어나고 lock을 호출하기 직전에 다른 쓰레드로 스케쥴링 돼서 다른 쓰레드가 아이템을 먼저 써버린다던가 그런건가요 ???

 

0
  • 답변 1

  • 전재형
    2017-05-04 22:15:18

    if(CQ_count == Q_SIZE)

    로하면... 그냥 빠져나가버립니다.


     while로 해야지.  q가 빌때까지 기다리겠지요..


    while 부터 3번째 줄까지가 위의 의미입니다

  • 로그인을 하시면 답변을 등록할 수 있습니다.