park waiter는 조건을 공개한 뒤 정확한 thread를 깨운다

공유 조건 변경과 waiter 참조 등록 순서를 맞춰 신호 유실을 막습니다.

  1. 1

    waiter 등록

    현재 thread 공개

  2. 2

    조건 재검사

    이미 open이면 대기 안 함

  3. 3

    park

    WAITING

  4. 4

    producer open

    상태 먼저 변경

  5. 5

    unpark waiter

    재검사 후 진행

핵심: 깨어난 thread는 lock 또는 동등한 메모리 경계 아래에서 조건을 다시 읽습니다.