/ / Cuando se desbloquea una exclusión mutua, ¿notifica todo o notifica solo? - c ++, multiproceso, mutex

Cuando se desbloquea un mutex, ¿notifica todos o notifica uno? - c ++, multiproceso, mutex

Como lo entiendo, cuando tengo una colección de hilos protegidos por un std::lock_guard o std::unique_lock encima std::mutex y el mutex se desbloquea, ya sea desbloqueando explícitamente o mediante el bloqueo fuera de alcance, luego se notifica a los hilos en espera.

¿Es esta notificación una notify_one o una notify_all?

Sospecho que el primero debe evitar apurarse y esperar, pero me gustaría estar seguro.

Respuestas

2 para la respuesta № 1

Lo que parece que estás preguntando es si, cuando el hilo T0 ha bloqueado mutex Me hilos T1..Tn están bloqueados intentando bloquear M, que pasa cuando T0 desbloquea M? Obviamente solo un hilo puede bloquear exitosamente M, por lo que no habría ninguna razón para que el sistema"notificar" (es decir, programar) más de un camarero. Sin embargo, su pregunta no es específica de ninguna plataforma, por lo que la respuesta debe ser "depende de la implementación".


2 para la respuesta № 2

Depende de la implementación. Los subprocesos en espera podrían estar esperando activamente en el espacio del usuario dentro del contexto de la llamada mutex :: lock () durante un breve periodo de tiempo para que se desbloquee el mutex y, una vez que esté desbloqueado, varios subprocesos en espera activa podrían detectarlo al mismo tiempo, pero solo uno podría bloquearlo. De lo contrario, una vez transcurrido el período activo, mutex.lock () emite una llamada al sistema y el sistema operativo coloca el hilo en la lista de espera para ese mutex. Cuando se desbloquea, solo un hilo se activa / notifica a obtener un bloqueo.