찾다

 >  Q&A  >  본문

linux - 뮤텍스 잠금 및 조건 변수를 이해하는 방법은 무엇입니까?

다음 코드는 "Unix/Linux 프로그래밍 실습 자습서"에서 가져온 것입니다. 해당 기능은 두 개의 스레드를 사용하여 각각 두 파일의 단어 수를 계산하고 메인 스레드의 총 수를 계산하는 것입니다. 다음은 작업 스크린샷입니다.

그러나 오랫동안 읽어도 다음 코드의 잠금, 잠금 해제 및 조건 변수를 이해하기는 여전히 어렵습니다.
묻고 싶은 점:

  1. 메인 스레드에서 pthread_cond_wait时会释放互斥锁,然后挂起主线程,并等待条件变量的发生变化,当其他线程调用pthread_cond_signal时,如果互斥锁是被锁住的,那么主线程中的pthread_cond_wait를 호출할 때 뮤텍스가 잠금 해제될 때까지 기다렸다가 반환되기 전에 뮤텍스를 잠그나요?

  2. 1에 설명된 대로라면 pthread_cond_wait收到了pthread_cond_signal发来的信号,但是未锁定互斥锁之前,又被其他线程抢了先,锁住了互斥锁,那不是pthread_cond_wait아직도 뮤텍스 잠금이 해제될 때까지 기다려야 합니까?

  3. 가능하다면 이 프로그램의 실행 과정을 명확하게 하는 데 도움이 되기를 바랍니다.

정말 감사합니다.

으아악
仅有的幸福仅有的幸福2750일 전1227

모든 응답(1)나는 대답할 것이다

  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:26:46

    메인 스레드가 잠금을 획득한 후 잠자기 상태가 되어 깨우기 위한 신호를 기다립니다.

    pthread_cond_signal이것이 신호

    이 종류의 잠금은 다른 잠금과 약간 다릅니다. 다른 유형의 잠금은 스레드가 잠금을 적용하고 잠금을 얻지 못한 경우 스레드가 대기 상태로 전환되는 것입니다.

    이런 종류의 잠금은 잠긴 상태에서 다른 스레드가 깨울 때까지 기다립니다.

    회신하다
    0
  • 취소회신하다