6️⃣
ReaderWriterLock
С помощью этого класса в любой момент времени можно получить или конкурентный доступ на чтение распределённого ресурса для множества потоков, или экслюзивный доступ на запись в него для одного, поэтому, в случае, когда ресурс нечасто меняется, будет обеспечена лучшая пропускная способность, чем с Монитором.У читателей и писателей разные очереди. В момент времени, когда поток высвобождает писательскую блокировку, все потоки, ожидавшие блокировку на чтение, получают её. И, наоборот, когда все эти читательские блокировки отпускаются, поток в читательской очереди обрабатывается. Получается, что примитив чередует обработку коллекции потоков читателей и одного потока писателя.
7️⃣
ReaderWriterLockSlim
Этот примитив синхронизации очень похож на предыдущий, и рекомендуется к использованию в версиях .NET новее .NET Framework 3.5Класс доработали с разных сторон: упрощены правила рекурсии и изменения состояния блокировки, исправлены многие случаи потенциального дедлока, а также общая производительность выше, чем у предшественника.
А вообще, помните друзья: лучший примитив синхронизации тот, который вам не понадобится, другими словами, не делите данные между потоками 😁