Встречается на собеседованиях • сегодня

Для чего используются примитивы синхронизации

Примитивы синхронизации помогают управлять доступом к общим ресурсам в многопоточных приложениях, предотвращая race conditions и обеспечивая корректность данных. Основные примитивы в C#:

  1. lock - простейший механизм для эксклюзивного доступа:
csharp
private readonly object _lockObj = new object();
lock (_lockObj) 
{
    // критическая секция
}
  1. Monitor (основа lock) - более гибкий вариант с Wait/Pulse:
csharp
Monitor.Enter(_lockObj);
try { /* работа */ }
finally { Monitor.Exit(_lockObj); }
  1. Mutex - межпроцессная блокировка:
csharp
using var mutex = new Mutex(false, "Global\\MyMutex");
mutex.WaitOne();
try { /* работа */ }
finally { mutex.ReleaseMutex(); }
  1. Semaphore/SemaphoreSlim - ограничивают количество потоков:
csharp
using var semaphore = new SemaphoreSlim(3); // максимум 3 потока
await semaphore.WaitAsync();
try { /* работа */ }
finally { semaphore.Release(); }
  1. ReaderWriterLockSlim - оптимизация для частого чтения:
csharp
var rwLock = new ReaderWriterLockSlim();
rwLock.EnterReadLock();
try { /* чтение */ }
finally { rwLock.ExitReadLock(); }

Выбор примитива зависит от сценария: lock для простых случаев, Semaphore для ограничения параллелизма, ReaderWriterLock при частом чтении.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы