Sobes.tech
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(); // Ослобађање мјутекса (само власник може)