내가 여기에 다음과 같은 코드를 참조 잠금 조건에 대한 출시 전 : https://docs.python.org/2/library/threading.html#condition-objects어떤 일 후 통보하고
# Consume one item (thread 1)
cv.acquire()
while not an_item_is_available():
cv.wait()
get_an_available_item()
cv.release()
# Produce one item (thread 2)
cv.acquire()
make_an_item_available()
cv.notify()
cv.release()
내 질문 스레드 1 전에 cv.wait()
에서 깨울되지만, cv.notify()
이 스레드 2를 호출 할 때입니다 스레드 2는 cv.release()
을 호출하고, 스레드 1은 잠금을 획득하지 못합니다 (맞습니까?). 제 질문은 스레드 1에 대한 동작은 cv.notify()
을 호출 한 후 스레드 2에서 cv.release()
을 호출하기 전에 무엇입니까?
업데이트 :
내가 https://stackoverflow.com/a/17337630/1497720에서 발견,하지만 자바에 대한 :
이 두 데이터 구조체 유지 - 대기 세트 및 항목 세트를. 기다리는 스레드는 대기 세트에 추가되고 고정되며 스레드 은 모니터를 가져 오려고 시도하고 항목 세트에 추가되고 은 고정됩니다. On 스레드는 대기 세트에서 가져온 후 항목 세트에 추가됩니다. 스레드가 잠금을 해제하면 의 스레드가있는 경우 해당 스레드의 잠금을 해제합니다. 이러한 집합은 사실 큐 (링크 된 목록)로 구현 된 이므로 FIFO 단위로 처리됩니다.
Condition.notify
의 문서에서