Re[3]: Блокировка поля класса в многоп. среде
От: ingie Россия  
Дата: 26.03.08 06:37
Оценка:
Здравствуйте, Георгий, Вы писали:

Г>Здравствуйте, ingie, Вы писали:


I>>Блокировка это, конечно, хорошо, но её придётся делать почти везде где происходит вызов getCurrent().


Г>Речь шла о блокировке на current. В том числе, в методе getCurrent().

Блокировка в getCurrent() не поможет, если где-то будет написано
c = getCurrent();
doSome(c);

Да и вообще она почти ничему не поможет.

Если уж с блокировками, то может лучше
class Channel {
...
  forEach(Visitor v) {
    synchronized(current) {
      for (o : current) {
        v.visit(o);
      }
    }
  }
...
}

И без getCurrent() вообще.
Иначе не будет гарантий как я понимаю. Или нет?

I>>Если на самом деле не нужно ...


Г>Вопрос в том, является ли присвоение атомарной операцией.

В current может лежать только старое значение или новое значение, никаких промежуточных вариантов быть не может,
как я понимаю. Допустим меня устраивают оба варианта.

Так можно или нет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.