과제에 대해 Java에서 카운팅 세마포를 만들어야합니다. 나는 지금까지 내가 혼란 내가 대기 (에 차단 함)와 반대로 어떻게() 신호에 하나의 스레드 차단을 해제 할 방법을 정확하게되어있어 지금의이 베어 뼈 클래스차단 및 차단 해제 방법에 대한 세마포어
public class Semaphore {
int value;
public Semaphore(int value) {
this.value = value;
}
public static void wait(Semaphore s) {
s.value--;
if (s.value < 0) {
// block
}
}
public static void signal(Semaphore s) {
s.value++;
if (s.value <= 0) {
// unblock one process that is blocked on semaphore
}
}
}
을 만들었습니다? 차단 된 대기열이 있지만 그 대기열에 대한 참조는 어디에 보관합니까?
어떤 잠금 프리미티브를 허용 했습니까? [Object # wait()] (http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait())? –
'wait()'와'signal()'을 인스턴스 메소드로 구현하지 않는 이유는 무엇입니까? 세마포어는 정의 상 다중 스레드에 의해 호출됩니다. 코드가 스레드로부터 안전하도록 동기화가 필요합니다. (Object가 이미'wait()'메소드를 가지고 있기 때문에'wait()'는'await()'(또는 다른 것)으로 명명되어야 함을주의하라. –