Middle
Koja je razlika između semafora i mutexa?
sobes.tech АИ
Одговор од АИ
Мьютекс (Mutex, Mutual Exclusion) — механизам за синхронизација који гарантује да у једном тренутку само један ток има приступ критичном одељку кода или ресурсу. Ради по принципу власништва: ток који је блокирао мјутекс, мора га и откључати.
Семафор (Semaphore) — општији механизам за синхронизацију који управља приступом ресурсу ограниченом одређеним бројем "дозвола". Токови могу добити дозволу ако је доступна и наставити са извршавањем. Када ресурс више није потребан, дозвола се враћа. Семафор нема концепт власништва; било који ток може повећати бројач семафора.
Кључне разлике:
- Назив: Мјутекс се користи за искључиви приступ (један ток), семафор — за управљање приступом ограниченом пулу ресурса (неколико токова до лимита).
- Власништво: Мјутекс има власника (ток који га је блокирао). Семафор нема власника.
- Бројач: Мјутекс се може посматрати као семафор са бројачем једнаким 1. Семафор може имати бројач већи од 1.
- Операције: Мјутекс:
WaitOne/Pulse/ReleaseMutex. Семафор:WaitOne/Release.
Ево једноставног примера коришћења семафора у C#:
// Креирамо семафор са почетном вредношћу 2 и максималном 2.
// Дозвољава да истовремено 2 тока приступе ресурсу.
SemaphoreSlim semaphore = new SemaphoreSlim(2, 2);
// Ток покушава да добије приступ ресурсу
semaphore.WaitOne();
// ... рад са ресурсом ...
semaphore.Release(); // Ослобађање дозволе
Пример мјутекса:
// Креирамо мјутекс
Mutex mutex = new Mutex();
// Ток покушава да добије искључиви приступ
mutex.WaitOne();
// ... рад са критичним одељком ...
mutex.ReleaseMutex(); // Ослобађање мјутекса (само власник може)