#c_sharp #net
Есть ли смысл в следующем коде: object _sync = new object(); bool _property; public bool MyProperty { get { lock (_sync) return _property; } set { lock (_sync) _property = value; } } Какие подводные камни могут быть при чтении\записи этого свойства из нескольких потоков?
Ответы
Ответ 1
Реализация технически верна. Но. Вы не должны думать о потокобезопасности в терминах отдельных свойств объекта. Потокобезопасность — свойство всего объекта, и всех определённых на нём операций. К примеру, если у вас есть свойство Age и свойство IsUnderage, которое должно равняться true тогда и только тогда, когда Age < 18. Если вы сделаете потокобезопасными оба свойства по отдельности, между установкой первого и второго останется момент, в который они несогласованы — таким образом, ваш класс как целое всё ещё не потокобезопасен. Таким образом, вы должны определить ваши сценарии использования (например — вызов публичных методов), и обеспечить потокобезопасность этих сценариев.
Комментариев нет:
Отправить комментарий