Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: 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 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.029 c
1-1104831450
markers
2005-01-04 12:37
2005.01.16
Del в TListView


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


3-1102839075
Dell3r
2004-12-12 11:11
2005.01.16
TQuickRep


14-1104313130
Pat
2004-12-29 12:38
2005.01.16
Восстановление WInXp


14-1104073570
Михайло
2004-12-26 18:06
2005.01.16
Где в Самаре