LINUX.ORG.RU

К знатокам ядра


0

0

Такой вопрос. Действительно ли atomic_read гарантирует атомарность? Реализован он просто как чтение volatile переменной (на x86,x86_64 по крайней мере). Сам по себе volatile же атомарности не гарантирует. ???

★★★

Гарантирует. На тех архитектурах, где потребуется дополнительное изьебство, для обеспечения атомарности, оно будет.

fmj
()
Ответ на: комментарий от fmj

Хм.. А где написано, что volatile гарантирует атомарность, в стандартах я этого не видел. Вот, например, пишу по памяти код:

volatile int i;
i++;

развернется во что-то такое (gcc -O2,x86):

movl i,%eax
incl %eax
movl %eax,i

Где ж атомарность?

Chumka ★★★
() автор топика
Ответ на: комментарий от Chumka

ты все правильно понимаеш

атомарное чтение на x86 гарантируется для 32-битных целых, возможно на что-то выровненых.

все остальное надо прикрывать например спинлоками

а вообщето атомарность довольно сложный вопрос.

cvv ★★★★★
()
Ответ на: комментарий от dilmah

>Чтение/запись 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 сам по себе не гарантирует атомарности! Или Ткните меня носом где это написано. :)

Chumka ★★★
() автор топика
Ответ на: комментарий от Chumka

>Это так, но зачем тогда объявлять ее как volatile в atomic_read?

чтобы компилятор(gcc) не мудрил,
он может закешировать ее и не читать из памяти например.

volatile указывает компилятору что переменная в любой момент может измениться, и следует все время брать ее из памяти

fghj ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.