es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , ,

Answer

  1. Avatar for 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ón share_print, lo que significa que múltiples hilos pueden entrar a la sección crítica al mismo tiempo. En cambio, la instrucción unlock debería moverse al final de la función share_print, de esta manera:

    void share_print(string msg, int id)
    {
        mu.lock();
        cout << msg << id << endl;
        mu.unlock();
    }
    

    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.

Comments are closed.