Kuo skiriasi muteksas ir semaforas? Kurį naudotumėte, kad apsaugotumėte prieigą prie papildomos operacijos?


Atsakymas 1:

POSIX semaforo apibrėžimas yra geras atspirties taškas:

Semaforas yra sveikasis skaičius, kurio vertė niekada neleidžiama nukristi žemiau nulio. Semaforoms galima atlikti dvi operacijas: padidinti semaforo vertę viena; ir sumažinkite semaforo vertę vienu. [1]

Mutex konceptualiai yra semaforas su papildoma savybe, kurios vertei niekada neleidžiama pakilti aukščiau vienos.

Tačiau dėl šio papildomo apribojimo mutex įgyvendinimas ir naudojimas yra pakankamai skirtingi nei semaforo įgyvendinimas ir naudojimas, kad būtų galima pateisinti juos dviem atskirais dalykais.

Išnašos

[1] sem_overview (7): POSIX semaforų apžvalga


Atsakymas 2:

Semaforas yra bendresnis terminas.

„Mutex“ reiškia „savitarpio atskirties semaforas“. Tai yra vienos rūšies semaforas, leidžiantis tik vienu vykdymo siūlu bet kuriuo metu naudoti duomenis, apsaugotus „mutex“.

Taip pat yra suskaičiuoti semaforai, kurie leidžia ne daugiau kaip savavališkai maksimalų gijų skaičių tam tikru metu naudoti semaforo saugomus duomenis. Vis dėlto tai yra gana retas atvejis.

Norėdami apsaugoti prieigą prie žingsnio, greičiausiai norėsite „mutex“.

Suskaičiuotas semaforas būtų naudingas tokiems kaip fiksuoto dydžio eilė. Jei eilėje yra N tarpų, galite nubusti N rašytojus, kad jie rašytų elementus į eilę. Taip pat, jei eilėje yra M elementų, galite pabusti prie M gijų, kad skaitytumėte iš eilės.

Atminkite, kad abiem atvejais tikriausiai turėsite „mutex“ ar kai kuriuos atominius kintamuosius, kad užtikrintumėte, jog tik vienas siūlas vienu metu iš tikrųjų keičia, pavyzdžiui, rodyklę / rodyklę rašymui arba rodyklę / rodyklę skaitymui.


Atsakymas 3:

Semaforas yra bendresnis terminas.

„Mutex“ reiškia „savitarpio atskirties semaforas“. Tai yra vienos rūšies semaforas, leidžiantis tik vienu vykdymo siūlu bet kuriuo metu naudoti duomenis, apsaugotus „mutex“.

Taip pat yra suskaičiuoti semaforai, kurie leidžia ne daugiau kaip savavališkai maksimalų gijų skaičių tam tikru metu naudoti semaforo saugomus duomenis. Vis dėlto tai yra gana retas atvejis.

Norėdami apsaugoti prieigą prie žingsnio, greičiausiai norėsite „mutex“.

Suskaičiuotas semaforas būtų naudingas tokiems kaip fiksuoto dydžio eilė. Jei eilėje yra N tarpų, galite nubusti N rašytojus, kad jie rašytų elementus į eilę. Taip pat, jei eilėje yra M elementų, galite pabusti prie M gijų, kad skaitytumėte iš eilės.

Atminkite, kad abiem atvejais tikriausiai turėsite „mutex“ ar kai kuriuos atominius kintamuosius, kad užtikrintumėte, jog tik vienas siūlas vienu metu iš tikrųjų keičia, pavyzdžiui, rodyklę / rodyklę rašymui arba rodyklę / rodyklę skaitymui.