Sobes.tech
Middle+

Pode dar um exemplo de uma situação em que ocorre um bloqueio mútuo de processos, fazendo com que fiquem presos para sempre?

sobes.tech IA

Resposta da IA

O deadlock (bloqueio mútuo) ocorre quando dois ou mais processos (ou threads) mantêm recursos ao mesmo tempo e cada um espera que o outro libere um recurso. Como resultado, nenhum deles consegue continuar.

Exemplo:

  • O processo A adquire o recurso R1.
  • O processo B adquire o recurso R2.
  • O processo A tenta adquirir o recurso R2 e fica bloqueado, esperando sua liberação.
  • O processo B tenta adquirir o recurso R1 e também fica bloqueado.

Ambos os processos esperam um pelo outro, levando a um bloqueio infinito.

Exemplo em C++ com mutexes:

#include <mutex>
#include <thread>
#include <iostream>

std::mutex mtx1, mtx2;

void thread1() {
    std::lock_guard<std::mutex> lock1(mtx1);
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
    std::lock_guard<std::mutex> lock2(mtx2);
    std::cout << "Thread 1 adquiriu ambos os locks\n";
}

void thread2() {
    std::lock_guard<std::mutex> lock2(mtx2);
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
    std::lock_guard<std::mutex> lock1(mtx1);
    std::cout << "Thread 2 adquiriu ambos os locks\n";
}

int main() {
    std::thread t1(thread1);
    std::thread t2(thread2);
    t1.join();
    t2.join();
    return 0;
}

Neste exemplo, um deadlock pode ocorrer se thread1 adquirir mtx1 e thread2 adquirir mtx2, e ambos ficarem esperando um pelo outro.