La mejor práctica es no sondear ... ¿pero no se realiza el sondeo internamente de todos modos cuando un hilo llama a espera ()?

13

Supongamos que tenemos un hilo que quiere verificar cuando otro hilo termine su tarea. He leído que deberíamos llamar a una función de tipo esperar () que hará que este hilo espere hasta que reciba una notificación de que el otro hilo está terminado. Y esto es bueno porque significa que no estamos realizando una encuesta costosa.

¿Pero no está el sondeo internamente en un nivel más bajo? Es decir. si hacemos que el hilo espere (), ¿el kernal no realiza el sondeo de todos modos para comprobar cuándo finaliza el otro hilo de modo que pueda notificar al primer hilo?

Supongo que me estoy perdiendo algo aquí, ¿puede alguien iluminarme?

    
pregunta csss 30.03.2013 - 15:25

1 respuesta

28

El sistema operativo proporciona ciertas primitivas para este tipo de comunicación entre procesos que no requieren sondeo.

Si el proceso A está esperando en mutex M, el sistema operativo sabe que A no se puede ejecutar y lo pone a un lado en un grupo de procesos que esperan que algo suceda. Cuando el proceso que contiene M lo libera, el sistema operativo mira la lista de procesos que lo esperan. El primer proceso de la lista, tal vez A, se elimina del grupo inactivo y se coloca en la cola de ejecución . La próxima vez que A obtenga un intervalo de tiempo, la espera () a la que llamó volverá y el programa continuará.

    
respondido por el Blrfl 30.03.2013 - 15:47

Lea otras preguntas en las etiquetas