Back to questions
Junior — Middle
63
Чем отличаются механизм взаимного исключения Lock и Semaphore при управлении доступом к ресурсам?
Companies where asked
appfox
Answer from AI
sobes.tech AI
Lock (взаимное исключение) и Semaphore (семафор) — это механизмы синхронизации, но они отличаются по функциональности и применению:
-
Lock (Mutex)
- Предназначен для обеспечения эксклюзивного доступа к ресурсу.
- Только один поток может владеть Lock в данный момент.
- Если Lock занят, другие потоки ждут освобождения.
- Используется для защиты критических секций.
-
Semaphore
- Имеет счетчик, который определяет, сколько потоков может одновременно получить доступ к ресурсу.
- Может разрешать доступ нескольким потокам одновременно (например, семафор с счетчиком 3 позволяет 3 потокам одновременно).
- Используется для управления доступом к ограниченному числу ресурсов.
Пример на C#:
// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // захват
// критическая секция
mutex.ReleaseMutex(); // освобождение
// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // максимум 3 одновременных доступа
semaphore.WaitOne();
// работа с ресурсом
semaphore.Release();
Таким образом, Lock — это частный случай семафора с максимальным счетчиком 1.