Sobes.tech
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 (ազատ) Ոչ բացասական թիվ
Նպատակը քննադատական հատվածների պաշտպանություն, փոխադարձ բացառություն սահմանափակ ռեսուրսների մուտքը կառավարել
Իշխանություն Տիրապետող ունի (հոսքը, որը գրավել է) Հստակ տիրապետում չկա
Ով կարող է ազատել Միայն տիրապետողը կարող է ազատել Կանխիկ հոսքը կարող է ազատել