Semaphore vs Mutex
Semaphore-ը տվյալների կառուցվածք է, որն օգտագործվում է համոզվելու համար, որ մի քանի պրոցեսներ միաժամանակ չեն մուտք գործում ընդհանուր ռեսուրս կամ կրիտիկական բաժին, զուգահեռ ծրագրավորման միջավայրերում: Սեմաֆորները օգտագործվում են մեռյալ կողպեքներից և մրցավազքի պայմաններից խուսափելու համար: Mutex-ը (Փոխադարձ բացառման օբյեկտ) օգտագործվում է նաև մի քանի միաժամանակյա գործընթացների միջոցով ընդհանուր ռեսուրսի մուտքից խուսափելու համար:
Ի՞նչ է սեմաֆորը:
Semaphore-ը տվյալների կառուցվածք է, որն օգտագործվում է կրիտիկական հատվածների փոխադարձ բացառման համար: Սեմաֆորները հիմնականում աջակցում են երկու գործողություն, որոնք կոչվում են սպասել (պատմականորեն հայտնի է որպես P) և ազդանշան (պատմականորեն հայտնի է որպես V):Սպասման գործողությունը արգելափակում է պրոցեսը, մինչև սեմալտը բացվի, և ազդանշանի գործողությունը թույլ կտա մուտք գործել մեկ այլ գործընթաց (թել): Յուրաքանչյուր սեմաֆոր կապված է սպասման գործընթացների հերթի հետ: Երբ սպասման գործողությունը կանչվում է թելով, եթե սեմաֆորը բաց է, շարանը կարող է շարունակվել: Եթե սեմաֆորը փակ է, երբ սպասման գործողությունը կանչվում է շղթայով, շարանը արգելափակված է, և այն պետք է սպասի հերթում: Ազդանշանի գործողությունը բացում է սեմաֆորը, և եթե հերթում արդեն սպասող շարանը կա, ապա այդ գործընթացը թույլատրվում է շարունակել, և եթե հերթում սպասող թելեր չկան, ազդանշանը հիշվում է հաջորդ թելերի համար: Գոյություն ունեն երկու տեսակի սեմաֆորներ, որոնք կոչվում են մութեքս սեմաֆորներ և հաշվող սեմաֆորներ: Mutex սեմալիստները թույլ են տալիս մեկ մուտք դեպի ռեսուրս, իսկ հաշվիչը թույլ է տալիս մի քանի թելերի մուտք գործել ռեսուրս (որն ունի մի քանի հասանելի միավոր):
Ի՞նչ է Mutex-ը:
Համակարգչային հավելվածը գործարկելու դեպքում այն կստեղծի մուտեքս և կցի այն ռեսուրսին:Երբ ռեսուրսն օգտագործվում է շղթայի կողմից, այն կողպված է, և այլ թելեր չեն կարող այն օգտագործել: Եթե մեկ այլ շարանը ցանկանում է օգտագործել նույն ռեսուրսը, նա պետք է հարցում կատարի: Այնուհետև այդ շարանը կտեղադրվի հերթում, մինչև առաջին շարանը ավարտվի ռեսուրսի հետ: Երբ առաջին շարանը ավարտվի ռեսուրսի հետ, կողպեքը կհեռացվի, և հերթում սպասող շարանը կարող է մուտք գործել ռեսուրս: Եթե հերթում սպասող մի քանի շղթաներ կան, ապա դրանք հասանելի են դառնում պտտվող հիմունքներով: Գործնականում, երբ mutex-ը փոխարինում է ռեսուրսի հասանելիությունը մի քանի թելերի միջև, այն տեսանելի կլինի, քանի որ մի քանի թելեր միաժամանակ սպառում են ռեսուրսը: Բայց ներսից միայն մեկ շղթա է մուտք գործում տվյալ պահին ռեսուրս:
Ո՞րն է տարբերությունը Semaphore-ի և Mutex-ի միջև:
Չնայած թե՛ սեմալիստները և թե՛ մուտեքս օբյեկտները օգտագործվում են զուգահեռ ծրագրավորման միջավայրերում փոխադարձ բացառման հասնելու համար, դրանք ունեն որոշ տարբերություններ:Մուտեքս օբյեկտը թույլ է տալիս միայն մեկ շարանը սպառել ռեսուրսը կամ կրիտիկական հատվածը, մինչդեռ սեմաֆորները թույլ են տալիս սահմանափակ քանակությամբ միաժամանակյա մուտքեր դեպի ռեսուրս (առավելագույն թույլատրելի թվի տակ): Մուտեքս օբյեկտների դեպքում այլ շղթաներ, ովքեր ցանկանում են մուտք գործել ռեսուրս, պետք է հերթ կանգնեն, մինչև ընթացիկ շարանը ավարտվի ռեսուրսի միջոցով: