Junior — Middle
Já teve que usar mecanismos de bloqueio mútuo para sincronizar threads ou processos?
sobes.tech IA
Resposta da IA
O bloqueio mútuo (deadlock) é uma situação em que dois ou mais threads ou processos bloqueiam-se mutuamente para sempre, esperando pela libertação de recursos ocupados pelo outro.
Para sincronizar threads e evitar bloqueios mútuos em C/C++, frequentemente são utilizados diversos mecanismos:
- Uso de mutexes (
std::mutex) com uma ordem cuidadosa na aquisição de recursos. - Uso de
std::lockoustd::scoped_lockpara bloquear múltiplos mutexes simultaneamente sem risco de bloqueio mútuo. - Uso de timeouts ao tentar adquirir bloqueios, para evitar esperas infinitas.
Exemplo com std::scoped_lock, que impede bloqueios mútuos ao adquirir dois mutexes:
#include <mutex>
std::mutex mtx1, mtx2;
void safeFunction() {
std::scoped_lock lock(mtx1, mtx2); // bloqueia ambos os mutexes ao mesmo tempo
// secção crítica
}
Se trabalhou com threads, é importante seguir uma ordem na aquisição de recursos e usar meios modernos de sincronização para evitar bloqueios mútuos.