Sobes.tech
Middle

C++ standarta kutubxonasida qanday mutex turlari mavjud?

sobes.tech AI

AIdan javob

C++ standart kutubxonasida (C++11 dan boshlab) quyidagi turdagi mutexlar belgilangan:

  • std::mutex: Asosiy, rekursiv bo'lmagan mutex. Uni egallagan oqim uni yana egallay olmaydi, uni avval bo'shatmasdan. Uni qayta egallashga urinish noma'lum xatti-harakatlarga olib keladi.

  • std::recursive_mutex: Rekursiv mutex. Bir oqim uni bir necha marta egallashiga imkon beradi. Egallash va bo'shatish soni mos kelishi kerak, shunda mutex boshqa oqimlar uchun mavjud bo'ladi. std::mutex ga nisbatan qo'shimcha xarajatlar keltiradi.

  • std::timed_mutex: std::mutex bilan bir xil, ammo vaqt bilan egallashga urinish imkoniyatini beradi (try_lock_for, try_lock_until). Ba'zi hollarda o'zaro bloklanishni oldini olish uchun qulay.

  • std::recursive_timed_mutex: std::recursive_mutex va std::timed_mutex ning kombinatsiyasi bo'lib, vaqt bilan rekursiv egallash imkonini beradi.

std::shared_mutex (C++17 dan boshlab) bo'linadigan kirish (o'qish/yozish) uchun mutex bo'lib, u yuqorida sanab o'tilgan asosiy mutex turlariga o'xshash "turlar" ga kirmaydi, ammo resurslarga kirishni sinxronlashtirish uchun ishlatiladi. U ko'p oqimga bir vaqtning o'zida o'qishga ruxsat beradi, lekin faqat bitta oqim yozishi mumkin.