Зачем атомарное чтение считать переменную в структуре тасклета?

В подпрограмме tasklet_action - при обработке записи из списка 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);
    }

1 ответ

Тасклет считается деактивированным / отключенным, если счетчик не равен нулю.

В некоторых архитектурах операция чтения не выполняется в одной инструкции сборки. Например, если вы читаете 64-битное значение, компилятор может реализовать чтение, используя две инструкции загрузки сборки, так что 1-я инструкция читает младшие 32 бита, а 2-я команда читает старшие 32 бита. Это в свою очередь может привести к состоянию гонки. Таким образом, атомарные чтения предпочтительнее.

Другие вопросы по тегам