Встречается на 8% собеседований по C#
Для чего используются примитивы синхронизации
Примитивы синхронизации помогают управлять доступом к общим ресурсам в многопоточных приложениях, предотвращая race conditions и обеспечивая корректность данных. Основные примитивы в C#:
- lock - простейший механизм для эксклюзивного доступа:
csharp
private readonly object _lockObj = new object();
lock (_lockObj)
{
// критическая секция
}- Monitor (основа lock) - более гибкий вариант с Wait/Pulse:
csharp
Monitor.Enter(_lockObj);
try { /* работа */ }
finally { Monitor.Exit(_lockObj); }- Mutex - межпроцессная блокировка:
csharp
using var mutex = new Mutex(false, "Global\\MyMutex");
mutex.WaitOne();
try { /* работа */ }
finally { mutex.ReleaseMutex(); }- Semaphore/SemaphoreSlim - ограничивают количество потоков:
csharp
using var semaphore = new SemaphoreSlim(3); // максимум 3 потока
await semaphore.WaitAsync();
try { /* работа */ }
finally { semaphore.Release(); }- ReaderWriterLockSlim - оптимизация для частого чтения:
csharp
var rwLock = new ReaderWriterLockSlim();
rwLock.EnterReadLock();
try { /* чтение */ }
finally { rwLock.ExitReadLock(); }Выбор примитива зависит от сценария: lock для простых случаев, Semaphore для ограничения параллелизма, ReaderWriterLock при частом чтении.
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы