Sobes.tech
Middle

Kokie rūšies mutexai egzistuoja C++ standartinėje bibliotekoje?

sobes.tech AI

Atsakymas iš AI

Standartinėje C++ bibliotekos (nuo C++11) yra apibrėžti šie rūšių mutexai:

  • std::mutex: Pagrindinis, nerekursinis mutexas. Srautas, kuris jį valdo, negali jo pakartotinai įgyti be ankstesnio atlaisvinimo. Bandymas jį pakartotinai įgyti tuo pačiu srautu sukelia nenuspėjamą elgesį.

  • std::recursive_mutex: Rekursinis mutexas. Leidžia vienam srautui jį įgyti kelis kartus. Skirtumas tarp įgyjimų ir atlaisvinimų turi būti lygus, kad mutexas būtų prieinamas kitiems srautams. Didina išlaidas, palyginti su std::mutex.

  • std::timed_mutex: Tas pats kaip std::mutex, bet su galimybe bandyti įgyti su laiko apribojimu (try_lock_for, try_lock_until). Naudinga siekiant išvengti tarpusavio blokavimų tam tikrais atvejais.

  • std::recursive_timed_mutex: std::recursive_mutex ir std::timed_mutex derinys, leidžiantis rekursyviai įgyti su laiko apribojimu.

std::shared_mutex (nuo C++17) yra mutexas su dalijamu prieiga (skaitymas/rašymas), tačiau jis nepriklauso pagrindiniams "tipų" mutexams toje pačioje prasmėje kaip ir aukščiau išvardyti, nors naudojamas sinchronizuoti prieigą prie išteklių. Jis leidžia keliems srautams skaityti vienu metu, tačiau tik vienam srautui rašyti.