0

두 개의 스레드가 있습니다. 하나는 x를 조작하고 다른 하나는 x를 표시합니다. 어떻게 동기화, 인터럽트, 대기 및 통보를 사용하여 상호 배제를 할 수 있습니까? 이미지가 이것을 보여줍니다. 대기, 동기화, 인터럽트 및 알림을 사용하는 상호 제외

Execution image

나는이 해결책을 왔지만 올바른 경우 스피 확인하지 않았습니다.

쓰기

synchronized(x){ 
    x = x + 1; 
    notify(); 
    try{ 
     wait(); 
    } 
    catch(InterruptedException e){ 
    } 
} 

읽기

synchronized(x){ 

    try{ 
     wait(); 
    } 
    catch(InterruptedException e){ 
    } 
    System.out.print(x); 
} 

답변

0

이미 이런 일이하지 않을 있는지 확인 synchronized(x) {} 폐쇄를 사용했습니다. 당신이하고있는 일은 정확합니다. 명령문이 별도의 메소드에있는 경우 메소드가 동기화되어이 메소드에서 벗어날 때까지 영향을받지 않게 할 수 있습니다.

public synchronized void doSmth() { 
    //do smth; 
}