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.