Sobes.tech
Middle

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 com std::mutex.

  • std::timed_mutex: Igual ao std::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 de std::recursive_mutex e std::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.