anonymous
написал 23 августа 2005 года в 05:33 (1220 просмотров)
Ведет себя
неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.
Приветствую.
Читал в литуратуре, но пока не догоняю смысл терминов «атомарный», «атомарность». Может кто на пальцах изложить, либо если есть документ в интернете — то с удовольствием почитаю.
Спасибо.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
В школе объясняли следующее: атом — значит неделимый. Здесь тоже самое. А вот чуть более подробное объяснение: 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 будет хлам, вместо очень полезной строки.
ты забыл уточнить тип «a» и «b»….
и вообще, язык, на котором это написано..
уточнил бы, в каком контексте понимать, а?
действительно, «атомарная операция» — это такая операция, которая для остальных участников системы будет выглядеть неделимой (в данном случае, не суть важно, будет она неделимой по процессу или по результату действия).
впрочем, как уже было сказано, понятие «неделимости» — довольно резиновое…
Ну раз уж я начал говорить про ядро, то есессно C… Хотя да, как-то не сообразил, что и C умеет таким образом копировать структуры. Неправ был.
уточняю:
`a=b' будет атомарной если:
они a и b оба — 8, 16, или 32 бит (char, int, указатель), на 64bit архитектуре можно и 64 бит. long long int на 32 битном компутере на асме можно атомарно переслать, но как gcc к этому относится не проверял. Может быть пойдут типы mmx или sse — не пытался ни разу заставить gcc компилировать '=' в movaps, поэтому не знаю. В общем, атомарность той или иной операции зависит не только от архитектуры, но и от компилятора.
вопрос был несколько не к тебе :)))
а к поднявшему тему :)
(там же по цитате должно было бы быть видно, но, правда, сам виновать, автора надо для цитат всё же приписывать.. ленива, правда.. да и трафик не резиновый.)