Sobes.tech
Middle

C++ стандарт китепканасында кандай типтеги муьтекстер бар?

sobes.tech AI

AIден жооп

C++ стандарт китепканасында (C++11ден бери) төмөндөгүлөр белгилүү:

  • std::mutex: Негизги, рекурсив эмес mutex. Аны ээ болгон жип аны алдын ала бошотпостон кайра алууга болбойт. Ошол эле жип аны кайра алууга аракет кылса, анык эмес жүрүм-турумга алып келет.

  • std::recursive_mutex: Рекурсивдүү mutex. Бир жип аны бир нече жолу алууга мүмкүнчүлүк берет. Алып алуу жана бошотуу саны дал келиши керек, анткени 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ден баштап) бөлүштүрүлгөн кирүү (окуу/жазуу) үчүн mutex болуп саналат, бирок ал негизги "түрлөр" mutexтерге кирбейт, бирок ресурстарга кирүүнү синхрондоштуруу үчүн колдонулат. Ал көптөгөн жиптердин бир убакта окуусуна мүмкүндүк берет, бирок бир гана жип жазуу жүргүзө алат.