.NET: автоматически ли CLR вводит базовую безопасность потоков (блокировки) для объектов, выделенных в куче? - PullRequest
1 голос
/ 14 февраля 2010

Я имею в виду некоторые основные операции, такие как чтение / запись атрибутов класса. Или, может быть, он вводит более высокий уровень синхронизации?

Ответы [ 2 ]

4 голосов
/ 15 февраля 2010

Нет, потокобезопасность не гарантируется. Вы можете использовать ключевое слово lock в экземплярах ссылочного типа (например, функция простого мьютекса). Спецификация языка определяет, какие операции являются атомарными без блокировок.

Новый .NET 4 теперь включает в себя поточно-ориентированные классы, такие как ConcurrentBag , которые должны облегчить написание кода, не заботясь о блокировке самостоятельно.

2 голосов
/ 14 февраля 2010

Нет, это не так. Вы должны синхронизировать доступ к объектам самостоятельно. Отдельные операции чтения / записи 32-битных значений на 32-битной платформе являются атомарными, но это не означает, что обновления объекта являются потокобезопасными.

Поскольку синхронизация добавляет некоторые накладные расходы, добавление этого для всех объектов, вероятно, будет значительным штрафом для общей производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...