Как стать автором
Обновить

Комментарии 5

Изучая исходники можно увидеть множество примеров использования гранулированных блокировок, использования грамотных алгоритмов вместо блокировок, а также использование специальных инструкций и более “легких” примитивов синхронизации, чем Monitor.

Было бы интересно узнать конкретику. Гранулированные блокировки — это блокировка части коллекции? Какие «специальные» инструкции и более легкие примитивы используются?
Ссылка на исходники ConcurrentDictionary будет лучшим ответом на ваш вопрос.
В нем есть примеры и гранулированных блокировок (вы верно поняли, это блокировка части коллекции, по одному объекту блокировки на каждый букет в случае Dictionary) и прочих приемов. Все с очень понятными комментариями.
Хм… А есть где-нибудь хорошая статья про потокобезопасность без локов?
Есть хорошая книга Concurrency in .NET, в которой как раз рассматриваются способы построения архитектуры многопоточного приложения без использования локов.

>Из примеров выше очевидно, что concurrent коллекции не дают полной защиты от race conditions

Лично я не готов согласиться, что из примеров выше что-то очевидно, особенно касательно concurrent-коллекций и race condition, т.к. приведенные примеры лишь демонстрируют несостоятельность классических коллекций к многопоточному применению. А очень хотелось бы такую демонстрацию, для того, чтобы это действительно стало очевидно.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории