Cómo implementar sleep(0) en Linux
void ZeroSleep()
Sleep(0);
}
Sleep(0) se utiliza para liberar el intervalo de tiempo de la CPU para evitar esperas ocupadas. Por lo tanto, damos por sentado que la forma en que se implementa en Linux es:
void ZeroSleep()
{
msleep(0); p>
}
Pero, de hecho, el código fuente de la API msleep es el siguiente:
void msleep(unsigned int msecs)
{
tiempo de espera largo sin firmar = msecs_to_jiffies(msecs) 1;
while (tiempo de espera)
tiempo de espera = Schedule_timeout_ uninterruptible(tiempo de espera);
De esta forma, aunque el parámetro sea 0, al menos una unidad de santiamén deberá estar hibernada, provocando graves problemas de rendimiento.
La solución a este problema es:
Dado que el propósito de ZeroSleep es liberar recursos de la CPU, msleep se puede reemplazar llamando a la función Schedule(). De hecho, msleep se implementa llamando a Schedule_timeout_uninterruptible, por lo que este método es razonable.
/blog/static/17230170820100275580656/