В стандартной библиотеке C++ (начиная с C++11) доступны следующие виды мьютексов:
std::mutex: Базовый, нерекурсивный мьютекс. Может быть заблокирован только один раз одним потоком. При попытке повторной блокировки из того же потока возникает неопределенное поведение.std::recursive_mutex: Рекурсивный мьютекс. Поток может блокировать его несколько раз. Для каждого lock() требуется соответствующий unlock().std::timed_mutex: Нерекурсивный мьютекс с возможностью попытки блокировки в течение определенного времени (try_lock_for, try_lock_until).std::recursive_timed_mutex: Рекурсивный мьютекс с возможностью попытки блокировки в течение определенного времени.Кроме того, для реализации общей блокировки (множество потоков могут одновременно читать, но только один может писать) существует:
std::shared_mutex (C++17): Обеспечивает два уровня блокировки: совместную (для чтения, несколько потоков) и эксклюзивную (для записи, один поток).std::shared_timed_mutex (C++14): Аналогичен std::shared_mutex, но с возможностью попытки блокировки в течение определенного времени.Наиболее часто используемым является std::mutex. std::recursive_mutex следует использовать осторожно, так как он может скрывать логические ошибки. В C++14/17 для многих сценариев чтения/записи предпочтительнее использовать std::shared_mutex или std::shared_timed_mutex.
c