Вниз
Скачать: 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.029 c
4-1101593346
Davinchi
2004-11-28 01:09
2005.01.16
Как включить SpeakerPhone на голосовом модеме


14-1104219018
NewDelpher
2004-12-28 10:30
2005.01.16
Солдаты Великой Отечественной


1-1104713529
неспящий
2005-01-03 03:52
2005.01.16
Как определить в RichEdit количество символов в строке?


14-1104209846
Чеширский_Кот
2004-12-28 07:57
2005.01.16
Оранжевый сайт


1-1104386706
Бизон
2004-12-30 09:05
2005.01.16
Свой хелп




   Наверх