Sobes.tech
Middle

Ի՞նչ տեսակների մյուտեքսներ կան C++ ստանդարտ գրադարանում։

sobes.tech AI

Պատասխան AI-ից

C++ ստանդարտ գրադարանում (C++11-ից սկսած) սահմանված են հետևյալ տեսակի մյուտեքսներ.

  • std::mutex: Հիմնական, ոչ ռեկուրսիվ մյուտեքս։ Տարածողը չի կարող կրկին ձեռք բերել այն առանց նախապես ազատելու։ Փորձը կրկին ձեռք բերելու նույն թելից հանգեցնում է անորոշ վարքագծի։

  • std::recursive_mutex: Ռեկուրսիվ մյուտեքս։ Թելին թույլ է տալիս միաժամանակ մի քանի անգամ ձեռք բերել այն։ Ձեռբերման և ազատման թիվը պետք է համընկնի, որպեսզի մյուտեքսը հասանելի լինի մյուս թելերին։ Ավելացնում է ծախսերը std::mutex-ի համեմատ։

  • std::timed_mutex: Դրանում նույնն է, ինչ std::mutex, բայց հնարավոր է փորձել ձեռք բերել ժամանակային սահմանափակությամբ (try_lock_for, try_lock_until)։ Օգտակար է որոշ դեպքերում փոխադարձ բլոկավորումները կանխելու համար։

  • std::recursive_timed_mutex: Կոմբինացիա std::recursive_mutex և std::timed_mutex-ի, որը թույլ է տալիս ռեկուրսիվ ձեռքբերում ժամանակային սահմանափակությամբ։

std::shared_mutex (C++17-ից) — բաժնետիրական մուտք գործելու մյուտեքս (կարդալ/գրել), բայց այն չի պատկանում հիմնական "տիպերի" մյուտեքսների նույն իմաստով, ինչ վերևում նշվածները, թեև օգտագործվում է ռեսուրսների մուտքի սինխրոնիզացման համար։ Այն թույլ է տալիս միաժամանակ մի քանի թելերի կարդալ, բայց միայն մեկին կարող է գրել։