Примитивы синхронизации доступно 🙏
1️⃣
Простейший в использовании примитив синхронизации в .NET, который используется для обеспечения взаимоисключающего доступа к распределённому ресурсу путём получения или высвобождения блокировки на специальном объекте.
Монитор предназначен для использования в рамках одного процесса, и чтобы это делать максимально эффективно и удобно в C# завезли оператор
2️⃣
▪️предоставляет эксклюзивный доступ к ресурсу
▪️также как и Монитор, требует того, чтобы поток, получивший Мьютекс, высвободил его
Однако, главная прелесть этого примитива в возможности межпроцессной синхронизации - достаточно присвоить ему строковое имя, чтобы разные сервисы могли открывать уже существующий примитив.
3️⃣
При этом потоки, которые пытаются пробиться к ресурсу будут ждать, пока любой поток с доступом высвободит семафор, поскольку, в отличие от Мьютекса, поток, заполучивший примитив, не обязан его высвобождать - это может сделать другой.
Семафоры бывают именованными, для синхронизации на уровне ОС, и локальными в рамках одного процесса.
4️⃣
Согласно предписаниям Microsoft его рекомендуется использовать для синхронизации в одном процессе.
5️⃣
Monitor
Простейший в использовании примитив синхронизации в .NET, который используется для обеспечения взаимоисключающего доступа к распределённому ресурсу путём получения или высвобождения блокировки на специальном объекте.
Монитор предназначен для использования в рамках одного процесса, и чтобы это делать максимально эффективно и удобно в C# завезли оператор
lock
- синтаксический сахар над конструкцией try-Enter-finally-Exit
.Mutex
Мьютекс очень похож на Монитор: ▪️предоставляет эксклюзивный доступ к ресурсу
▪️также как и Монитор, требует того, чтобы поток, получивший Мьютекс, высвободил его
Однако, главная прелесть этого примитива в возможности межпроцессной синхронизации - достаточно присвоить ему строковое имя, чтобы разные сервисы могли открывать уже существующий примитив.
Semaphore
Семафор ограничивает число потоков, у которых есть конкурентный доступ к пулу распределённых ресурсов.При этом потоки, которые пытаются пробиться к ресурсу будут ждать, пока любой поток с доступом высвободит семафор, поскольку, в отличие от Мьютекса, поток, заполучивший примитив, не обязан его высвобождать - это может сделать другой.
Семафоры бывают именованными, для синхронизации на уровне ОС, и локальными в рамках одного процесса.
SemaphoreSlim
Это облегчённая и оптимизированная версия локального Cемафора.Согласно предписаниям Microsoft его рекомендуется использовать для синхронизации в одном процессе.
Interlocked
Этот класс стандартной библиотеки предоставляет возможность выполнять простые атомарные операции на переменных, такие как: сложение, инкремент и декремент, перестановка и условная перестановка на основе сравнения, а также чтение long
значений.