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