nixp.ru v3.0

21 января 2017,
суббота,
07:30:32 MSK

DevOps с компанией «Флант»
anonymous написал 23 августа 2005 года в 05:33 (592 просмотра) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Приветствую.

Читал в литуратуре, но пока не догоняю смысл терминов «атомарный», «атомарность». Может кто на пальцах изложить, либо если есть документ в интернете — то с удовольствием почитаю.

Спасибо.

rgo

В школе объясняли следующее: атом — значит неделимый. Здесь тоже самое. А вот чуть более подробное объяснение: http://www.webopedia.com/TERM/A/atomic_operation.html

Ещё лучше: http://www.google.com/search?q=atomic+operation

а вообще — общего определения мне не придумать. Как всё просто на ассемблере :). Каждая команда — атомарная операция. Ну, может за исключением команд с префиксом повторения типа rep movsb. То есть даже такое определение не работает.

В случае ядра, атомарная операция — это операция которая выполниться успешно, если в момент начала её выполнения все необходимые условия соблюдены, либо обломается — если не соблюдены. Третьего не дано. Например, что начнётся она когда все условия соблюдены, а в процессе выполнения вмешается обработчик прерывания, или задача с другого процессора и условия эти испортит.

Например a=b — атомарная операция, а strcpy (dst, src) — нет, т.к. в процессе копирования строки, кто-нить может изменить один из задействованных кусков памяти. И в результате в dst будет хлам, вместо очень полезной строки.

Genie
Например a=b — атомарная операция,

ты забыл уточнить тип «a» и «b»….

и вообще, язык, на котором это написано..

Читал в литуратуре, но пока не догоняю смысл терминов «атомарный», «атомарность»

уточнил бы, в каком контексте понимать, а?

действительно, «атомарная операция» — это такая операция, которая для остальных участников системы будет выглядеть неделимой (в данном случае, не суть важно, будет она неделимой по процессу или по результату действия).

впрочем, как уже было сказано, понятие «неделимости» — довольно резиновое…

rgo
Genie
ты забыл уточнить тип «a» и «b»….

и вообще, язык, на котором это написано..

Ну раз уж я начал говорить про ядро, то есессно C… Хотя да, как-то не сообразил, что и C умеет таким образом копировать структуры. Неправ был.

Genie
уточнил бы, в каком контексте понимать, а?

уточняю:

`a=b' будет атомарной если:

они a и b оба — 8, 16, или 32 бит (char, int, указатель), на 64bit архитектуре можно и 64 бит. long long int на 32 битном компутере на асме можно атомарно переслать, но как gcc к этому относится не проверял. Может быть пойдут типы mmx или sse — не пытался ни разу заставить gcc компилировать '=' в movaps, поэтому не знаю. В общем, атомарность той или иной операции зависит не только от архитектуры, но и от компилятора.

Genie
rgo
Genie
уточнил бы, в каком контексте понимать, а?

уточняю:

вопрос был несколько не к тебе :)))

а к поднявшему тему :)

(там же по цитате должно было бы быть видно, но, правда, сам виновать, автора надо для цитат всё же приписывать.. ленива, правда.. да и трафик не резиновый.)

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.