Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Tu je rozdelenie ich kľúčových charakteristík a využívania:
* Synchronizačný mechanizmus: Semafory bránia rasovým podmienkam, kde viac procesov, ktoré sa snažia získať prístup k rovnakému zdroju súčasne, môžu viesť k nepredvídateľným a nesprávnym výsledkom. Vynútia kontrolovaný príkaz na prístup.
* Hodnota počítadla: Semaphore si zachováva nezápornú celočíselnú hodnotu. Táto hodnota predstavuje počet dostupných zdrojov alebo povolení.
* `SEM_WAIT ()` (alebo `SEM_TRYWAIT ()`): Táto operácia znižuje hodnotu semaforu. Ak je hodnota vyššia ako nula, je znížená a proces pokračuje. Ak je hodnota nula, proces sa blokuje (čaká), až kým sa hodnota semaforu nestane väčšia ako nula (ďalší proces ju zvyšuje pomocou `SEM_POST`). `SEM_TRYWAIT ()` je neohrabávajúca verzia; Vráti chybu, ak je hodnota semaforu nula.
* `SEM_POST ()`: Táto operácia zvyšuje hodnotu semaforu. Ak je proces zablokovaný čakajúci na semafor, jeden z procesov čakania sa prebudí.
* typy: Linux poskytuje pomenované a nemenované semafory.
* nemenované semafory: Tieto sa vytvárajú pomocou `SEM_INIT ()` a sú prístupné iba v rámci procesu alebo skupiny vlákien, kde boli vytvorené. Zvyčajne sa používajú na synchronizáciu v rámci jedného procesu.
* pomenované semafory: Tieto sa vytvárajú pomocou `SEM_OPEN ()` a existujú v zdieľanej pamäti systému. Prístup k nim majú prístup viacerými procesmi, ktoré umožňujú komunikáciu medzi procesmi (IPC). Pomenované semafory sú identifikované jedinečným názvom.
* binárne semafory: Semafor s maximálnou hodnotou 1 sa často nazýva binárny semafor. Pôsobí ako zámok mutex (vzájomné vylúčenie), čo umožňuje iba jednému procesu prístup k zdieľanému zdroju súčasne.
* Počítanie semaforov: Semafor s hodnotou vyššou ako 1 je počítanie semafor. Môže predstavovať viac inštancií zdroja, čo umožňuje viacerým procesom prístup k zdroju súčasne až po hodnotu semaforu.
Príklad (koncepčný):
Predstavte si tlačiareň zdieľanú viacerými procesmi. Na riadenie prístupu by sa mohla použiť semafor počítania:
1. Inicializácia: Semafor je inicializovaný na počet tlačiarní (napr. 3).
2. Proces 1 chce tlačiť: Volá `SEM_WAIT ()`. Hodnota semaforu sa znižuje (3 sa stáva 2) a proces pokračuje v tlači.
3. Proces 2 chce tlačiť: Volá `SEM_WAIT ()`. Hodnota semaforu sa znižuje (2 sa stáva 1) a proces pokračuje v tlači.
4. Proces 3 chce tlačiť: Volá `SEM_WAIT ()`. Hodnota semaforu sa znižuje (1 sa stáva 0) a proces pokračuje v tlači.
5. Proces 4 chce tlačiť: Volá `SEM_WAIT ()`. Hodnota semaforu je 0, takže proces blokuje, až kým nebude k dispozícii tlačiareň.
6. Proces 1 Dokončí tlač: Volá `SEM_POST ()`. Hodnota semaforu sa zvyšuje (0 sa stáva 1) a proces 4 sa prebudí.
Kľúčové knižnice: V systéme Linux sú semafory zvyčajne prístupné pomocou semaforových funkcií POSIX deklarované v `