2015-10-16 37 views
0

在tasklet_action常規 - 同時處理來自

核心的tasklet_vec列表中的條目,我們將自動讀取的atomic_read(& T->計數),我沒有看到
通過了例行任何用途,什麼是它的顯著?
爲什麼要在tasklet結構中進行原子讀取來計數變量?

if (tasklet_trylock(t)) { // check is it is not already being executed 
     if (!atomic_read(&t->count)) { 
      if (!test_and_clear_bit(TASKLET_STATE_SCHED, &t->state)) 
       BUG(); 
      t->func(t->data); // call tasklet action routine 
      tasklet_unlock(t); 
      continue; 
     } 
     tasklet_unlock(t); 
    } 
+0

'.count'字段計數[tasklet_disable]的數量(http://lxr.free-electrons.com/source/include/linux/interrupt.h#L566)調用。 – Tsyvarev

回答

0

如果計數不等於零,則認爲該tasklet被禁用/禁用。

在某些體系結構中,讀取操作不會發生在單個彙編指令中。例如,如果您正在讀取64位值,則編譯器可以使用匯編的兩個加載指令來實現讀取,以便第一條指令讀取較低的32位,第二條指令讀取較高的32位。這反過來可能導致競爭狀態。所以,原子讀取是首選。

相關問題