Page 72 - 4657
P. 72

class Q {
       int n;
       boolean valueSet = false;
       synchronized int get() {
       if (!valueSet)
       try wait();
       catch(InterruptedException e):
       System.out.println("Got: " + n);
       valueSet = false;
       notify();
       return n;
       }
       synchronized void put(int n) {
       if (valueSet)
       try wait(); catch(InterruptedException e);
       this.n = n;
       valueSet = true;
       System.out.println("Put: " + n);
       notify();
       } }
       А от і результат роботи цієї програми, що ясно
       показує, що синхронізація досягнута.
       С:\> java Pcsynch
       Put: 1
       Got: 1
       Put: 2
       Got: 2
       Put: 3
       Got: 3
       Put: 4
       Got: 4
       Put: 5
       Got: 5


            Клінч (deadlock)


           Клінч - рідка, але дуже труднодоступна помилка, при якій
       між двома легковагими процесами існує кільцева залежність від
       пари синхронізованих об'єктів. Наприклад, якщо один підпроцес
       70
   67   68   69   70   71   72   73   74   75   76   77