Semaphore vs Mutex
Semaphore është një strukturë të dhënash që përdoret për t'u siguruar që procese të shumta të mos kenë akses në një burim të përbashkët ose në një seksion kritik në të njëjtën kohë, në mjedise programimi paralel. Semaforët përdoren për të shmangur bllokimet e vdekura dhe kushtet e garës. Mutex (Objekti i përjashtimit të ndërsjellë) përdoret gjithashtu për të shmangur aksesin në një burim të përbashkët në të njëjtën kohë nga disa procese të njëkohshme.
Çfarë është një semafor?
Semaphore është një strukturë të dhënash që përdoret për të siguruar përjashtimin reciprok të seksioneve kritike. Semaforët mbështesin kryesisht dy operacione të quajtura pritje (historikisht e njohur si P) dhe sinjal (historikisht i njohur si V). Operacioni i pritjes bllokon një proces derisa semafori të jetë i hapur dhe operacioni i sinjalit lejon një proces tjetër (thread) të hyjë. Çdo semafor shoqërohet me një radhë procesesh pritjeje. Kur operacioni i pritjes thirret nga një thread, nëse semafori është i hapur, filli mund të vazhdojë. Nëse semafori mbyllet kur operacioni i pritjes thirret nga një thread, thread-i bllokohet dhe duhet të presë në radhë. Operacioni i sinjalit hap një semafor dhe nëse ka një thread tashmë që pret në radhë, ai proces lejohet të vazhdojë dhe nëse nuk ka fije që presin në radhë, sinjali mbahet mend për thread-ët e ardhshëm. Ekzistojnë dy lloje semaforësh të quajtur semaforë mutex dhe semaforë numërues. Semaforët Mutex lejojnë një akses të vetëm në një burim dhe semaforët e numërimit lejojnë shumë fije për të hyrë në një burim (i cili ka disa njësi në dispozicion).
Çfarë është një Mutex?
Kur niset një aplikacion kompjuterik, ai do të krijojë një mutex dhe do ta bashkojë atë me një burim. Kur burimi përdoret nga një thread, ai është i kyçur dhe temat e tjera nuk mund ta përdorin atë. Nëse një thread tjetër dëshiron të përdorë të njëjtin burim, do të duhet të bëjë një kërkesë. Pastaj ajo fije do të vendoset në një radhë derisa filli i parë të përfundojë me burimin. Kur filli i parë të përfundojë me burimin, bllokimi do të hiqet dhe filli që pret në radhë mund të ketë akses në burim. Nëse ka shumë fije që presin në radhë, atyre u jepet akses në një bazë rrotulluese. Praktikisht, kur mutex alternon aksesin në një burim midis disa thread-ve, ai do të jetë i dukshëm pasi threads të shumtë po konsumojnë një burim në të njëjtën kohë. Por nga brenda vetëm një fill i vetëm po i qaset burimit në një kohë të caktuar.
Cili është ndryshimi midis Semaphore dhe Mutex?
Megjithëse, të dy semaforët dhe objektet mutex përdoren për të arritur përjashtimin e ndërsjellë në mjediset e programimit paralel, ato kanë disa dallime. Një objekt mutex lejon vetëm një thread të konsumojë një burim ose një seksion kritik, ndërsa semaforët lejojnë një numër të kufizuar aksesesh të njëkohshme në një burim (nën një numër maksimal të lejuar). Me objektet mutex, thread-ët e tjerë që duan të aksesojnë burimin duhet të presin në një radhë, derisa thread-i aktual të përfundojë duke përdorur burimin.