Junior
Ի՞նչ է մյուտեքսը և սեմաֆորը:
sobes.tech AI
Պատասխան AI-ից
Մյուտեքսը բինարային սեմաֆոր է, որը կամ ազատ է (արժեքը 1), կամ զբաղեցված (արժեքը 0): Այն օգտագործվում է քննադատական հատվածների պաշտպանության համար և ապահովում է ռեսուրսին մուտքի փոխադարձ բացառություն: Միայն այն հոսքը, որը գրավել է մյուտեքսը, կարող է այն ազատել:
Սեմաֆորը՝ դա մյուտեքսի ընդհանրացումն է, որը ներկայացնում է հաշվիչ: Այն կարող է ընդունել ոչ բացասական արժեքներ և օգտագործվում է սահմանափակ ռեսուրսների մուտքը կառավարելու համար: Հոսքը կարող է գրավել սեմաֆորը, եթե հաշվիչը մեծ է քան զրո (նվազեցնելով այն), և ազատել սեմաֆորը (մեծացնելով հաշվիչը): Սեմաֆորը կարող է ազատվել այլ հոսքից, ոչ այն կողմից, որը այն գրավել է:
Հիմնական տարբերությունները՝
- Նպատակը: Մյուտեքսը՝ քննադատական հատվածների պաշտպանության համար, Սեմաֆորը՝ մուտքի կառավարում ռեսուրսներին:
- Արժեքը: Մյուտեքս (0 կամ 1), Սեմաֆորը (յուրաքանչյուր ոչ բացասական թիվ):
- Իշխանություն: Մյուտեքսը ունի տիրապետող (հոսքը, որը այն գրավել է), Սեմաֆորը չունի հստակ տիրապետում:
- Ով կարող է ազատել: Մյուտեքսը կարող է ազատել միայն տիրապետողը, Սեմաֆորը կարող է ազատել ցանկացած հոսք:
#include <mutex> // std::mutex-ի համար
#include <semaphore> // std::counting_semaphore-ի համար
std::mutex mtx; // Ռեսուրսի պաշտպանության համար մյուտեքս
void critical_section() {
mtx.lock(); // Մյուտեքսի գրավում
// Ընդհանուր ռեսուրսին մուտք
mtx.unlock(); // Մյուտեքսի ազատում
}
// Սեմաֆոր՝ 5 ռեսուրսի մուտքը կառավարելու համար
std::counting_semaphore<5> sem(5);
void access_resource() {
sem.acquire(); // Ռեսուրսի գրավում (հաշվիչը նվազեցնելով)
// Ռեսուրսի օգտագործում
sem.release(); // Ռեսուրսի ազատում (հաշվիչը մեծացնել)
}
Համեմատություն աղյուսակում:
| Գծագիր | Մյուտեքս | Սեմաֆոր |
|---|---|---|
| Տիպ | Սինխրոնիզացիայի օբյեկտ (բինար սեմաֆոր) | Սինխրոնիզացիայի օբյեկտ (հաշվիչ) |
| Արժեք | 0 (զբաղեցված), 1 (ազատ) | Ոչ բացասական թիվ |
| Նպատակը | քննադատական հատվածների պաշտպանություն, փոխադարձ բացառություն | սահմանափակ ռեսուրսների մուտքը կառավարել |
| Իշխանություն | Տիրապետող ունի (հոսքը, որը գրավել է) | Հստակ տիրապետում չկա |
| Ով կարող է ազատել | Միայն տիրապետողը կարող է ազատել | Կանխիկ հոսքը կարող է ազատել |