Вниз
Скачать: CL | DM;

Оцените дизайн сайта, пожалуйста.   Найти похожие ветки 

← →
Gero ©   (2004-12-29 21:24) [40]


> iZEN ©   (29.12.04 20:48)

Not found.


← →
iZEN ©   (2004-12-29 22:17) [41]

to Gero ©   (29.12.04 21:24) [40]
Это он [jigsaw.w3.org] так перегружен - сам на него с пятого раза запостил. (-;

to TUser ©   (29.12.04 14:27) [29]
Вот фрагмент кода:
/**
   * Увеличивает внутренний счетчик,
   * возможно активирует нить.
   */
  public synchronized void release() {
     if (counter == 0) {
        this.notify();
     }
     counter++;
  }
  /**
   * Уменьшает счетчик или блокирует,
   * если тот равен 0
   * @throws InterruptedException передается из this.wait().
   */
  public synchronized void acquire() throws InterruptedException {
     while (counter == 0) {
        this.wait();
     }
     counter--;
  }

Ваши аргументы надуманны из-за непонимания семантики synchronized-методов в Java. У каждого объекта (и ещё у каждого класса, кстати) есть внутренний монитор, который связывается во время исполнения JVM с synchronized-методами: два и более потока (нити) не могут одновременно исполнять не то что единственный synchronized-метод но и любые два и более synchronized-метода объекта. Поэтому код release() с acquire() будет выполняться всегда последовательно - один за другим, вне зависимости от того, сколько потоков  (нитей) работает с семафором.
Комментарии:
this.notify() освобождает внутренний монитор объекта для первого попавшегося ожидающего (блокированного на мониторе) потока (нити);
this.wait() - единовременная блокировка потока (нити) на мониторе объекта - монитор взводится для конкретного потока (нити);
цикл while (counter == 0) {...} - виток - нужен для блокировки всех потоков (нитей), если они обращаются к коду при counter == 0.



Страницы: 1 2 вся ветка

Скачать: CL | DM;



Память: 0.52 MB
Время: 0.027 c
14-1103666539
ArMellon
2004-12-22 01:02
2005.01.16
Как устроены форумы


9-1096361464
VasyaPupkin
2004-09-28 12:51
2005.01.16
DelphiX


1-1104325019
Aleksandr.
2004-12-29 15:56
2005.01.16
Люди, какая версия для Define у Делфи 2005?


3-1103057311
ceval
2004-12-14 23:48
2005.01.16
Подскажите пожалуста как можно реализовать:


4-1101666645
Davinchi
2004-11-28 21:30
2005.01.16
Как послать на СОМ порт несколько команд модему




   Наверх