Pregunta

pasé un buen tiempo en la búsqueda de información sobre las diferencias entre time.h :: sueño () y pthread.h :: pthread_yield (), pero no pudo encontrar ningún material de referencia sólido y por lo que estoy publicando esta pregunta.

¿Cuál es la diferencia entre time.h :: sueño () y pthread.h :: pthread_yield ()?

Actualización:

La razón que pido es porque yo estaba usando el sueño () para dormir () cada hilo individuo ... y mi solicitud empecé a tener problemas cuando había 8 hilos vs 4 hilos. Cuando fui en línea para ver si el sueño () sólo afecta a cada hilo, no pude encontrar ninguna buena referencia que indique si el sueño () afecta a todo el proceso o el sueño () sólo afecta al hilo individual.

¿Fue útil?

Solución

Desde pthread_yield :

  

La subrutina pthread_yield obliga al subproceso de la llamada a abandonar el uso de su procesador, y que esperar en la cola de ejecución antes de que se programa de nuevo. Si la cola de ejecución está vacía cuando la subrutina pthread_yield se llama, el subproceso de llamada se vuelve a programar inmediatamente.

Desde la página de manual sueño :

  

sueño () hace que el proceso de la llamada hasta que el sueño sec segundos han transcurrido o una señal llega que no se pasa por alto.

Si no quiere tener un retardo de tiempo real en sus hilos y sólo quieren permitir que otros hilos para hacer su trabajo, entonces pthread_yield se adapta mejor que el sueño.

Otros consejos

sueño () hace que el programa deje de ejecución de un cierto período de tiempo. No importa lo que pase en el sistema, el hilo no se iniciará de nuevo hasta por lo menos la cantidad de tiempo transcurrido para dormir () ha transcurrido. pthread_yield () notifica al sistema operativo que el hilo se hace trabajar, y que puede conmutar la ejecución a otro hilo. Sin embargo, si no hay un hilo de mayor prioridad que tiene que hacer el trabajo en ese momento, el hilo se puede empezar de nuevo inmediatamente.

IOWs, después de dormir () el hilo está garantizado para dejar de correr, incluso si nadie más lo necesita para funcionar, mientras que pthread_yield () es sólo una forma educada para dar otros hilos oportunidad de correr si lo necesitan.

Actualizar en respuesta a la pregunta de actualización: tanto el sueño () y pthread_yield () afecta sólo el subproceso de llamada

.

sueño (s) toma el hilo de ejecución actual y suspende hasta s segundos han pasado (o que es despertado por una señal.)

En términos más prácticos, cuando se llama a sleep (), ese hilo dejará de ejecución y sólo ... esperar hasta que haya transcurrido el tiempo especificado. Una vez que pasa, que el hilo se coloca en la cola de listos.

pthread_yield () dice "tomar este hilo, y lo puso en la cola de listos ". El hilo se detendrá la ejecución y estar en estado 'esperando' a ser seleccionado / dirigido por el planificador. Esto no gaurantee que el hilo no se vuelvan a publicarse de inmediato. Pero da otro hilo la oportunidad de correr en un punto dado en su ejecución.

Voy a salir en una extremidad y decir que el sueño (0) podría lograr lo mismo como pthread_yield () -. Tanto detener la ejecución y la colocación de la rosca en la cola de listos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top