Eventuali duplicati:
Why can't you sleep while holding spinlock?Perché non è permesso "dormire" mentre si tiene uno spinlock?
Per quanto ne so, spinlocks deve essere usato in breve durata, e sono solo scelte nel codice, come gestore di interrupt dove dormire (prelazione) è non autorizzato.
Tuttavia, non so perché ci sia una "regola" che NON DOVREBBE non dormire affatto tenendo uno spinlock. So che non è una pratica raccomandata (dal momento che è dannosa per le prestazioni), ma non vedo ragioni per cui il sonno NON DEVE essere permesso negli spinlock.
Non si può tenere un blocco di selezione mentre si acquisiscono un semaforo, perché si potrebbe avere a dormire in attesa che il semaforo, e non si può dormire mentre si tiene un blocco di selezione (da "Linux Kernel Development" di Robert Love) . Non
L'unico motivo che posso vedere è per ragioni di portabilità, perché in un unico processore, spinlocks sono implementati come disabilitazione interrupt, e da interrupt invalidanti, dormire è naturalmente consentito (ma dormire non si romperà codice in sistemi SMP) .
Ma mi chiedo se il mio ragionamento è corretto o se ci sono altri motivi.
Qual è questa regola di cui parli? –
Ho appena aggiunto una citazione da un libro in cui è sorta la mia qustion. – SHH
Questo mi sembra qualcosa di specifico nello sviluppo del kernel Linux. Se stai parlando dello sviluppo del kernel Linux, tagga la domanda di conseguenza. –