Синхронизация read-access методов
От: Аноним  
Дата: 13.01.11 01:24
Оценка:
Для чего необходимо синхранизация методов типа getters?
Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?
Re: Синхронизация read-access методов
От: Аноним  
Дата: 13.01.11 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Для чего необходимо синхранизация методов типа getters?

А>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?

Data Consistency.
Важно не просто не покораптить данные паралельной модификацией, но также убедиться что когда вы будете дергать гетер — объект в валидном состоянии.
Re: Синхронизация read-access методов
От: StanislavK Великобритания  
Дата: 13.01.11 11:39
Оценка: 7 (1)
Здравствуйте, Аноним, Вы писали:

А>Для чего необходимо синхранизация методов типа getters?

А>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?

Если у вас более чем одна переменная отвечает за состояние объекта, то все становисят немного сложнее.
Вот тут про это немного рассказано:

http://en.wikipedia.org/wiki/ABA_problem
Re: Синхронизация read-access методов
От: mrpg  
Дата: 13.01.11 13:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Для чего необходимо синхранизация методов типа 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


а если делать на неблокирующих алгоритмах, тут будем всё немного сложнее...
Вот тут про это немного написано:
http://www.javaconcurrencyinpractice.com/

а вот тут немного про red herring: http://www.logicalfallacies.info/relevance/red-herring/
Re[2]: Синхронизация read-access методов
От: Аноним  
Дата: 13.01.11 15:12
Оценка:
А>>Для чего необходимо синхранизация методов типа getters?
А>>Если методы set синхронизировать, причем, переменные сделать volotile, изменения ведь сразу будут видны getters?

А>Data Consistency.

А>Важно не просто не покораптить данные паралельной модификацией, но также убедиться что когда вы будете дергать гетер — объект в валидном состоянии.

сюрприз! параллельной модификации не будет
Re[3]: Синхронизация read-access методов
От: StanislavK Великобритания  
Дата: 13.01.11 17:53
Оценка:
Здравствуйте, Аноним, Вы писали:


SK>>Если у вас более чем одна переменная отвечает за состояние объекта, то все становисят немного сложнее.

SK>>Вот тут про это немного рассказано:

SK>>http://en.wikipedia.org/wiki/ABA_problem


А>а если делать на неблокирующих алгоритмах, тут будем всё немного сложнее...

А>Вот тут про это немного написано:
А>http://www.javaconcurrencyinpractice.com/

А>а вот тут немного про red herring: http://www.logicalfallacies.info/relevance/red-herring/


Ссылка не более чем пример того, что случается когда состояние объекта не синхронизиуется должным образом и когда volatile не поможет. Lock-free алгоритмы это просто частный случай, который авторам википедии было удобно использовать для примера.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.