Sobes.tech
Middle

Фарқи байни семафор ва мютекс чист?

sobes.tech AI

Ҷавоб аз AI

Мютекс (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(); // озод кардани мютекс (фақат соҳиби он метавонад)