Sobes.tech
Middle+

¿Puede dar un ejemplo de una situación en la que se produce un bloqueo mutuo de procesos que los hace quedar atrapados para siempre?

sobes.tech AI

Respuesta de la IA

El bloqueo mutuo (deadlock) ocurre cuando dos o más procesos (o hilos) mantienen recursos al mismo tiempo y cada uno espera a que el otro libere un recurso. Como resultado, ninguno puede continuar.

Ejemplo:

  • El proceso A adquiere el recurso R1.
  • El proceso B adquiere el recurso R2.
  • El proceso A intenta adquirir el recurso R2 y se bloquea, esperando que se libere.
  • El proceso B intenta adquirir el recurso R1 y también se bloquea.

Ambos procesos esperan al otro, lo que lleva a un bloqueo infinito.

Ejemplo en C++ con 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 << "Hilo 1 adquirió ambos bloqueos\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 << "Hilo 2 adquirió ambos bloqueos\n";
}

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

En este ejemplo, puede ocurrir un bloqueo mutuo si thread1 adquiere mtx1 y thread2 adquiere mtx2, y ambos esperan al otro.