Подтвердить что ты не робот

Разница в использовании и реализации ManualResetEvent (Slim), Semaphore (Slim) и ReaderWriterLock (Slim)

В .net 4.0 было добавлено несколько новых классов, связанных с многопоточностью: ManualResetEventSlim, SemaphoreSlim и ReaderWriterLockSlim.

В чем разница между версиями Slim и старшими классами, и когда я должен использовать одну поверх другой?

4b9b3361

Ответ 1

ReaderWriterLockSlim - лучшая версия ReaderWriterLock, которая быстрее и не страдает от голода писателя

ManualResetEventSlim и SemaphoreSlim являются полностью управляемыми версиями ManualResetEvent и Semaphore, которые затягиваются на некоторое время, прежде чем возвращаться к объектам ядра и, следовательно, быстрее, чем старые версии, когда время ожидания коротки.

Ответ 2

Вот несколько замечательных иллюстраций, объясняющих "поток" этих примитивов синхронизации. Они могут быть полезны для более конкретного понимания этих терминов (взято из этого блога)

SemaphoreSlim

enter image description here

CountdownEvent

enter image description here

Барьер

enter image description here

ManualResetEventSlim

enter image description here

Ответ 3

Для прямой цитаты из документации

"В .NET Framework версии 4 вы можете использовать класс System.Threading.ManualResetEventSlim для лучшей производительности, когда ожидаемое время ожидания будет очень коротким, а когда событие не пересечет границу процесса"

Ответ 4

ManualResetEventSlim и SemaphoreSlim - это более легкие версии объекта ядра, и они не выделяют объекты ядра, если не вызывается свойство WaitHandle.

Эти типы не блокируются напрямую, когда вызывается Wait, вместо этого они ненадолго вращаются перед блокировкой, если он получает сигнал

Конструктор ManualResetEventSlim может забирать SpinCount для блокировки числа spns перед блокировкой

Оба этих типа поддерживают отмену, когда вы можете передать метод CancellationToken to Wait

СемафорSlim предоставляет свойство CurrentCount, где окна Семафор не

ManualResetEvent имеет свойство IsSet, в котором событие windows не