Ի՞նչ տեսակների մյուտեքսներ կան 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-ից) — բաժնետիրական մուտք գործելու մյուտեքս (կարդալ/գրել), բայց այն չի պատկանում հիմնական "տիպերի" մյուտեքսների նույն իմաստով, ինչ վերևում նշվածները, թեև օգտագործվում է ռեսուրսների մուտքի սինխրոնիզացման համար։ Այն թույլ է տալիս միաժամանակ մի քանի թելերի կարդալ, բայց միայն մեկին կարող է գրել։