#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. Если вы сделаете потокобезопасными оба свойства по отдельности, между установкой первого и второго останется момент, в который они несогласованы — таким образом, ваш класс как целое всё ещё не потокобезопасен. Таким образом, вы должны определить ваши сценарии использования (например — вызов публичных методов), и обеспечить потокобезопасность этих сценариев.
Комментариев нет:
Отправить комментарий