Такой вопрос. Действительно ли atomic_read гарантирует атомарность? Реализован он просто как чтение volatile переменной (на x86,x86_64 по крайней мере). Сам по себе volatile же атомарности не гарантирует. ???
Хм.. А где написано, что volatile гарантирует атомарность, в стандартах я этого не видел. Вот, например, пишу по памяти код:
volatile int i;
i++;
развернется во что-то такое (gcc -O2,x86):
movl i,%eax
incl %eax
movl %eax,i
Где ж атомарность?
>Чтение/запись 32-битного выровненного объекта атомарна на x86
Это так, но зачем тогда объявлять ее как volatile в atomic_read?
A volatile read or write of a 32-bit int is atomic on most modern hardware, but volatile has nothing to do with it. It would likely be atomic without the volatile.
Ведь volatile сам по себе не гарантирует атомарности! Или Ткните меня носом где это написано. :)