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