LINUX.ORG.RU

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


0

0

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

★★★

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

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

fmj ()
Ответ на: Re: К знатокам ядра от fmj

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

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

volatile int i;
i++;

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

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

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

Chumka ★★★ ()
Ответ на: Re: К знатокам ядра от Chumka

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

ты же вел речь об atomic_read. Чтение/запись 32-битного выровненного объекта атомарна на x86/

dilmah ★★★★★ ()
Ответ на: Re: К знатокам ядра от Chumka

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

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

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

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

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

cvv ★★★★★ ()
Ответ на: Re: К знатокам ядра от dilmah

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

>Чтение/запись 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 ★★★ ()
Ответ на: Re: К знатокам ядра от Chumka

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

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

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

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

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