Duplicar posible:
Why can't you sleep while holding spinlock?¿Por qué no se permite "dormir" mientras se sostiene un spinlock?
Por lo que yo sé, spinlocks debe ser usado de corta duración, y son únicas opciones en código como manejador de interrupciones en el sueño (de preferencia) es No permitido.
Sin embargo, no sé por qué existe tal "regla" que NO DEBE estar durmiendo mientras sostiene un spinlock. Sé que no es una práctica recomendada (ya que es perjudicial para el rendimiento), pero no veo ninguna razón por la cual NO DEBERÍAN permitirse dormir en spinlocks.
No se puede mantener un bloqueo de giro, mientras que adquiera un semáforo, ya que podría tener que dormir a la espera del semáforo, y no se puede dormir mientras se mantiene un bloqueo de bucle (de "Linux desarrollo del núcleo" de Robert amor) . No
La única razón que puedo ver es por razones de portabilidad, ya que en monoprocesadores, spinlocks se implementan como deshabilitar interrupciones, y por interrupciones incapacitantes, dormir es, por supuesto, permite (pero dormir no va a romper el código en sistemas SMP) .
Pero me pregunto si mi razonamiento es correcto o si hay otros motivos.
¿De qué es esta regla de la que hablas? –
Acabo de agregar una frase en bloque de un libro donde surgió mi pregunta. – SHH
Eso me parece algo específico del desarrollo del kernel de Linux. Si está hablando del desarrollo del kernel de Linux, por favor marque la pregunta en consecuencia. –