Для чего необходимо синхранизация методов типа getters?
Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?
Re: Синхронизация read-access методов
От:
Аноним
Дата:
13.01.11 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Для чего необходимо синхранизация методов типа getters? А>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?
Data Consistency.
Важно не просто не покораптить данные паралельной модификацией, но также убедиться что когда вы будете дергать гетер — объект в валидном состоянии.
Здравствуйте, Аноним, Вы писали:
А>Для чего необходимо синхранизация методов типа getters? А>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?
Если у вас более чем одна переменная отвечает за состояние объекта, то все становисят немного сложнее.
Вот тут про это немного рассказано:
Здравствуйте, Аноним, Вы писали:
А>Для чего необходимо синхранизация методов типа getters? А>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?
Не забываем, еще и то, что volatile не делает операции с этой переменной атомарными.
Re[2]: Синхронизация read-access методов
От:
Аноним
Дата:
13.01.11 15:01
Оценка:
А>>Для чего необходимо синхранизация методов типа getters? А>>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?
M>Не забываем, еще и то, что volatile не делает операции с этой переменной атомарными.
ага, и если в set-е есть промежуточный write этой переменной, то в getter этот write вполне может быть виден.
Re[2]: Синхронизация read-access методов
От:
Аноним
Дата:
13.01.11 15:06
Оценка:
А>>Для чего необходимо синхранизация методов типа getters? А>>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?
SK>Если у вас более чем одна переменная отвечает за состояние объекта, то все становисят немного сложнее. SK>Вот тут про это немного рассказано:
SK>http://en.wikipedia.org/wiki/ABA_problem
А>>Для чего необходимо синхранизация методов типа getters? А>>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?
А>Data Consistency. А>Важно не просто не покораптить данные паралельной модификацией, но также убедиться что когда вы будете дергать гетер — объект в валидном состоянии.
Ссылка не более чем пример того, что случается когда состояние объекта не синхронизиуется должным образом и когда volatile не поможет. Lock-free алгоритмы это просто частный случай, который авторам википедии было удобно использовать для примера.