Quais tipos de mutexes existem na biblioteca padrão do C++?
sobes.tech IA
Resposta da IA
Na biblioteca padrão do C++ (a partir do C++11) estão definidos os seguintes tipos de mutex:
-
std::mutex: Mutex básico, não recursivo. Um thread que o possui não pode adquiri-lo novamente sem liberá-lo primeiro. Tentar adquiri-lo novamente pelo mesmo thread leva a um comportamento indefinido. -
std::recursive_mutex: Mutex recursivo. Permite que um mesmo thread o adquira várias vezes. O número de aquisições e liberações deve coincidir para que o mutex esteja disponível para outros threads. Aumenta os custos em comparação comstd::mutex. -
std::timed_mutex: Igual aostd::mutex, mas com a capacidade de tentar adquiri-lo com um tempo limite (try_lock_for,try_lock_until). É útil para evitar deadlocks em certos casos. -
std::recursive_timed_mutex: Combinação destd::recursive_mutexestd::timed_mutex, permitindo aquisição recursiva com tempo limite.
std::shared_mutex (a partir do C++17) é um mutex com acesso compartilhado (leitura/escrita), mas não pertence aos "tipos" básicos de mutex no mesmo sentido que os mencionados acima, embora seja usado para sincronizar o acesso a recursos. Permite que muitos threads leiam simultaneamente, mas apenas um thread possa escrever.