2014-02-03 2 views
0

typedef struct {int counter; } atomic_t;Атомная операция в Linux Kernel

Что означает atom_t? КАК это компилируется? Исторически, счетчик был объявлен изменчивым, что подразумевало, что это регистр CPU?

ответ

1

atomic_t указывает, что это атомный тип. Компилятор будет рассматривать его как typedefed struct. Я не знаю, что говорит история, но volatile обычно используется для пропуска оптимизации компилятора, и это не означает, что регистр CPU.

Ну, как следует из названия, все его операции являются атомарными, и это делается сразу, не может быть запланировано. У типов atomic_t есть несколько помощников (например, atomic_ {inc, dec}, atomic_or и многие) для управления любыми данными атомного типа. Во время манипуляции с атомным типом, помощники обычно вставляют блокировку шины, как будто они не прерываются и делают все атомарным.

+0

atomic_t указывает как typedefed struct, так что же такого особенного в этом? компилятор знает, что он не может быть запланирован? struct по определению не имеет этого. – lilzz

+0

Вы пропустите точку вставки шинного замка. На x86 существует инструкция блокировки для блокировки системной шины. Компилятор ничего не производит только объектный код, компилятор не выполняет код, CPU делает. Компилятору не нужно это знать. –

2

Причина, по которой она объявлена ​​как структура, такова, что программист, использующий ее, вынужден (мягко напоминал) использовать функции доступа для управления им. Например, aval = 27 не будет компилироваться. Также не будет aval++.

Ключевое слово volatile всегда означает противоположность регистров CPU: это означает значение, которое необходимо считывать и записывать в память напрямую.

Если counter был исторически volatile, это было неправильно, потому что volatile никогда не был достаточно хорошим для обеспечения надлежащих атомных обновлений. Я считаю, что текущие функции атомного манипулятора используют литье через летучий указатель , объединенный с соответствующими функциями барьера записи, и machine code for some operations that the compiler cannot do properly.

+0

благодарит за разъяснения по неустойчивому. но как структура гарантирована быть атомарной? – lilzz

Смежные вопросы