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