2010-02-04 2 views
0

MSDN (http://msdn.microsoft.com/en-us/library/aa332339(VS.71).aspx)은 wait가 "잠금을 해제하고 현재 스레드가 잠금을 다시 획득 할 때까지 차단합니다."라고 말합니다. 이는 기본적으로 토글 잠금을 설정 함을 의미합니다 (해제, 다른 스레드에게 실행 기회 제공, 잠금 재 획득). 그러나 이것이 펄스()가하는 일이 아닌가? Pulse와의 유일한 차이점은 자물쇠가 영구적으로 획득된다는 신호인가?Wait()과 Pulse()의 차이점

는 C# 스레딩 가이드 (http://www.albahari.com/threading/part4.aspx#_Wait_and_Pulse는) 아주 좋은 비유가 있습니다

는 "자동 주차장처럼 생각 : 당신이 당신의 티켓 (대기 큐)를 검증하기 위해 유료 역에서 먼저 대기;"

MSDN 설명에서 잠금 및 차단 (대기 잠금 전환과 동일)을 수행 할 때 하나의 자동차가 통과 한 다음 장벽 (잠금)이 중지된다는 의미입니다.

답변

1

Monitor.WaitMonitor.Pulse은 .NET의 참조 객체에 대한 조건 변수 작성을 지원하는 특정 패턴입니다. 그 특정 패턴 밖에서 그들은 쓸모가 없다 (또는 적어도 나는 그런 사용법을 보지 못했다).

차이점은 :

  • Wait : 잠금 해제, 재 취득 후 (물론 다른 스레드에서) 펄스 기다린 자물쇠.
  • Pulse : 잠금을 해제하고 대기중인 다른 스레드에 신호를 보낸 다음 잠금을 다시 획득합니다.

중간 비트입니다 : 두 가지 방법의 차이점을 나타내는 신호를 기다리며, 그 차이가 안전한 스레드 간 신호를 허용합니다. 요약 : 그들은 무언가를 만들기 위해 함께 맞는 상호 보완적인 부분입니다.

+1

http://www.albahari.com/threading/part4.aspx#_Wait_and_Pulse도 읽기 가치가 있습니다. –