Sobes.tech
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::lock ou std::scoped_lock para 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.