Кадом намуд муьтексов дар китобхонаи стандартии 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) — мютекс з роздільним доступом (читання/запис), але він не належить до базових "видів" мютексів у тому ж сенсі, що й перелічені вище, хоча й використовується для синхронізації доступу до ресурсів. Він дозволяє багатьом потокам читати одночасно, але лише одному потоку писати.