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