2014-10-02 3 views
0

내가 http://tutorials.jenkov.com/java-concurrency/semaphores.html이 코드에서 왜 세마포어가 아래쪽으로 카운트되지 않습니까?

에서이 튜토리얼을 읽고 있어요 그리고 그것은 세마포어 구현을 세고 것은 :

public class CountingSemaphore { 
    private int signals = 0; 

    public synchronized void take() { 
    this.signals++; 
    this.notify(); 
    } 

    public synchronized void release() throws InterruptedException{ 
    while(this.signals == 0) wait(); 
    this.signals--; 
    } 

} 

코드는 나에게 이상한 것 때문에 내가 거기에 얼마나 많은 가용 자원 세마포어 기록을 이해하는 것과, 그래서 우리는 take() 일 때 카운트를 줄이고 release() 일 때 카운트를 증가시켜야합니다 (그리고 물론 제한이 있습니다).

카운트 다운과 카운트 다운 방식의 차이점에 대해 더 많은 정보를 얻을 수있는 사람이 있습니까? 여기

+2

전체'take' /'release'는 거꾸로됩니다 -'release'는 기다리지 않고 알려야합니다. 그리고 그렇습니다. 세는 것도 뒤쳐져 있습니다. 저자에게 연락하는 것이 좋습니다. –

답변

1

, 두 가지 방법의 코드가 교환되었고,

public class CountingSemaphore { 
    private int signals = 0; 

    public synchronized void take() throws InterruptedException { 
    while(this.signals == 0) wait(); 
    this.signals--; 
    } 

    public synchronized void release() { 
    this.signals++; 
    this.notify(); 
    }  
} 

가 실제로 차단 방법은 여러 번 호출 할 수 있습니다 take하지 release입니다해야한다는 분명한 것 같다.

더 일반적으로 위쪽으로 세는 것이 자연스러운 것처럼 보이지만 이론적으로는 정반대로 수행 할 수도 있습니다. 유용하고 (그리고 읽을 수있을 것입니다) 확실하지 않습니다!

관련 문제