Комментарии 5
Изучая исходники можно увидеть множество примеров использования гранулированных блокировок, использования грамотных алгоритмов вместо блокировок, а также использование специальных инструкций и более “легких” примитивов синхронизации, чем Monitor.
Было бы интересно узнать конкретику. Гранулированные блокировки — это блокировка части коллекции? Какие «специальные» инструкции и более легкие примитивы используются?
Ссылка на исходники ConcurrentDictionary будет лучшим ответом на ваш вопрос.
В нем есть примеры и гранулированных блокировок (вы верно поняли, это блокировка части коллекции, по одному объекту блокировки на каждый букет в случае Dictionary) и прочих приемов. Все с очень понятными комментариями.
В нем есть примеры и гранулированных блокировок (вы верно поняли, это блокировка части коллекции, по одному объекту блокировки на каждый букет в случае Dictionary) и прочих приемов. Все с очень понятными комментариями.
Хм… А есть где-нибудь хорошая статья про потокобезопасность без локов?
Есть хорошая книга Concurrency in .NET, в которой как раз рассматриваются способы построения архитектуры многопоточного приложения без использования локов.
>Из примеров выше очевидно, что concurrent коллекции не дают полной защиты от race conditions
Лично я не готов согласиться, что из примеров выше что-то очевидно, особенно касательно concurrent-коллекций и race condition, т.к. приведенные примеры лишь демонстрируют несостоятельность классических коллекций к многопоточному применению. А очень хотелось бы такую демонстрацию, для того, чтобы это действительно стало очевидно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Сoncurrent collections за 10 минут