2015-11-02 11 views

risposta

6

spin_lock* funzioni fare lo stesso come raw_spin_lock* quelli più, quando il debugging blocco è abilitato (CONFIG_DEBUG_LOCK_ALLOC), effettuare alcuni controlli runtime aggiuntivi per le operazioni di bloccaggio, come assegni per deadlock. Questi controlli vengono eseguiti dal sottosistema lockdep.

Di norma, le funzioni spin_lock* devono essere utilizzate ogni volta che è possibile.

Solo in rari casi di politica di blocco molto complicata, quando lockdep è in grado di produrre falsi avvisi, è possibile utilizzare le funzioni raw_spin_lock*.

Inoltre, le funzioni raw_* possono essere preferite a quelle comuni per ridurre l'utilizzo della memoria o ragioni di prestazioni. Ma dovrebbe essere misurazioni tempo/spazio effettive , riflettendo le vittorie significative dall'utilizzo di queste ottimizzazioni.

+0

quando lockdep può generare falsi avvisi? e in -rt normale spin_lock può dormire mentre raw_spin_lock no, è vero? –

3

La differenza principale è spin_lock varianti di mappa a raw_spin_lock varianti per non RT, mentre se è impostato CONFIG_PREEMPT_RT, quindi mappano a rt_spin_lock che può ospitare.

Dissociando lo spin_lock dalle variazioni di sonno e non di sonno a seconda che sia RT o meno, l'API di spin_lock può essere mantenuta coerente attraverso il codice del kernel.

Problemi correlati