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