В стандартной библиотеке 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
В стандартной библиотеке 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
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.