вопрос по блокировке
От: Pavel Dvorkin Россия  
Дата: 12.02.12 18:05
Оценка:
Имеется единственный экземпляр класса, к которому в течение часа могут обращаться разные потоки для чтения и модификации. Операции синхронизированы, тут проблем нет. В экземпляре класса много всякого и разного.
Раз в час этот экземпляр должен заменяться на новый экземпляр, который в течение прошедшего часа изготавливался.

По логике вещей эту замену надо проводить атомарно. Но тогда все методы чтения и изменения в течение часа должны добираться к этому экземпляру через блокировку. Пустая трата времени в течение часа.

Между тем, если некий поток все же получит еще раз старое значение этой переменной, ничего плохого не будет по условиям задачи. Просто однажды она должна быть обновлена, а до тех пор можно и старое значение использовать. Минутой ранбше или позже — не важно.

Вопрос — можно ли рискнуть заменить ее без лока ? На С++ я бы рискнул. Указатель либо изменился, либо нет, но не может же он наполовину измениться. Так что он всегда валиден, только вот может быть либо старым, либо новым.

А вот в Яве боюсь. Что, если в это время влезет GC и посчитает нужным удалить старый экземпляр до того, как ссылка обновилась ? Или это невозможно ?

Хотелось бы знать мнение по этому вопросу, как лучше сделать.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.