lilzz
lilzz

Reputation: 5413

Atomic Operation in Linux Kernel

typedef struct { int counter; } atomic_t;

what does atomic_t means? HOW does compiled treats it? Historically, counter has been declared volatile, which implied it's a CPU register right?

Upvotes: 1

Views: 2294

Answers (2)

Zan Lynx
Zan Lynx

Reputation: 54325

The reason it is declared as a struct like that is so that the programmer using it is forced (gently reminded, rather) to use the access functions to manipulate it. For example, aval = 27 would not compile. Neither would aval++.

The volatile keyword has always meant the opposite of a CPU register: it means a value that has to be read from and written to memory directly.

If counter was historically volatile it was wrong because volatile has never been good enough on its own to ensure proper atomic updates. I believe that the current atomic manipulator functions use a cast through a volatile pointer combined with the appropriate write barrier functions, and machine code for some operations that the compiler cannot do properly.

Upvotes: 2

rakib_
rakib_

Reputation: 142625

atomic_t indicates it's an atomic type. Compiler will treats it as typedefed struct. I don't know what history says, but volatile is usually used to skip compiler optimizations and it doesn't imply CPU register.

Well, as it's name implies, all of it's operation is atomic i.e done at once, can't be scheduled out. atomic_t types have few helpers (like atomic_{inc,dec}, atomic_or and many) for manipulating any atomic type data. During manipulation of an atomic type, helpers usually inserts bus lock, as if they're not interrupted and make the whole thing atomic.

Upvotes: 1

Related Questions