El Mutex en c++ no está funcionando correctamente.
Estoy tratando de usar mutex para organizar el resultado entre dos hilos para imprimir el mensaje desde el Hilo 1 y luego imprimir el resultado del Hilo 2.
pero estoy obteniendo los mensajes que se imprimen al azar, por lo que parece que no estoy usando mutex correctamente.
std::mutex mu;
void share_print(string msg, int id)
{
mu.lock();
cout << msg << id << endl;
mu.unlock();
}
void func1()
{
for (int i = 0; i > -50; i--)
{
share_print(string("Desde Func 1: "), i);
}
}
int main()
{
std::thread t1(func1);
for (int i = 0; i < 50; i++)
{
share_print(string("Desde Principal: "), i);
}
t1.join();
return 0;
}
La salida es:
Imagen de la salida
davy.ai
Parece que el mutex no está siendo utilizado correctamente en este código. El problema principal es que la instrucción
unlock
se encuentra fuera de la funciónshare_print
, lo que significa que múltiples hilos pueden entrar a la sección crítica al mismo tiempo. En cambio, la instrucciónunlock
debería moverse al final de la funciónshare_print
, de esta manera:Con este cambio, el mutex se bloquea cuando se llama a
share_print
y se desbloquea cuando regresa, asegurando que solo un hilo pueda entrar a la sección crítica a la vez. Esto debería resultar en la salida esperada donde los mensajes del Hilo 1 se imprimen primero, seguidos de los mensajes del Hilo 2.