- 处理来自tasklet_vec列表的条目
核心,我们原子读取atomic_read(& t-> count),我看不到
通过例行程序的任何用途,它有什么重要意义?
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 :(得分:0)
如果计数不等于零,则将tasklet视为已停用/禁用。
在某些体系结构中,读取操作不会在单个汇编指令中发生。例如,如果您正在读取64位值,则编译器可能会使用两个汇编的加载指令实现读取,这样第一条指令读取低32位,第二条指令读取高32位。这反过来会导致竞争状况。因此,原子读数是首选。