Щетки безопасности резьбы

В соответствии с обычным заявлением о безопасности потоков.

Любые общедоступные статические (общие в Visual Basic) члены этого типа являются потокобезопасными.

Это делает Brushes.White потокобезопасным, но не new SolidBrush(Color.White)

Мой первый вопрос: почему, каковы технические отличия задней части?

Во-вторых, можно ли создать безопасные простые кисти, такие как Brushes.White?


person hultqvist    schedule 07.10.2011    source источник


Ответы (1)


Это шаблонное словоблудие для 99,9% всех классов .NET. Довольно бесполезно. Кисть имеет внутреннее поле неизменяемое, оно проверяется, когда вы устанавливаете свойство кисти Color. Не имеет ничего общего с нарезанием ниток, это просто не дает вам изменить цвет стандартной кисти (например, Brushes.White). Что, конечно, было бы очень плохо. Поскольку никаких других свойств, которые можно было бы изменить, это случайно делает стандартную кисть поточно-ориентированной.

Достаточно велики шансы, что ваш собственный SolidBrush тоже поточно-ориентирован, GDI + имеет встроенную внутреннюю блокировку. Например, вы можете нарисовать несколько потоков в растровом изображении, если они являются разными растровыми изображениями. Однако он явно не документирован как потокобезопасный, поэтому вы должны делать это на свой страх и риск. Что довольно бессмысленно для упражнений, просто не имеет большого смысла менять цвет кисти после ее создания. Или, если на то пошло, чтобы несколько ниток использовали одну и ту же кисть. Кисть очень дешевая, на ее создание уходит всего микросекунда.

person Hans Passant    schedule 07.10.2011