Атомарна операція - це

Атомарні операції - операції, що виконуються як єдине ціле або не виконуються зовсім. Атомарність операцій має особливе значення в багатопроцесорних комп'ютерах (і багатозадачних операційних системах), так як доступ до неподілюваний ресурсів повинен бути обов'язково атомарним.

Атомарна операція відкрита впливу тільки одного потоку.

Атомарність буває апаратної (коли безперервність забезпечується апаратурою) і програмної, коли використовуються спеціальні засоби межпрограммного взаємодії: м'ютекс. семафор). За своєю суттю програмні засоби забезпечення атомарности представляють собою два етапи: блокування ресурсу і виконання самої операції. Блокування являє собою атомарному операцію, яка або успішна, або повертає повідомлення про зайнятість.

Цей розділ не завершений.

Ви допоможете проекту, виправивши і доповнивши його такою інформацією: Прибрати асемблерну специфіку, розділити Сі і загальну теорію м'ютексів.

Стиль цієї статті неенціклопедічен або порушує норми російської мови.

Статтю слід виправити згідно стилістичним правилам Вікіпедії.

Найчастіше атомарна операція являє собою асемблерну інструкцію, проте не обов'язково. Також, що більш істотно, не кожна асемблерна інструкція атомарний.

Асемблерні інструкції і атомарность

Операції виконання яких завжди можна вважати атомарними:

Операції, які не є атомарними:

Атомарні інструкції x86

  • CMPXCHG / CMPXCHG8B / CMPXCHG16B - основна атомарна команда x86 порівняння і обмін. При використанні з префіксом LOCK [1] [2] виконує атомарному порівняння змінної з вказаним значенням і пересилання в залежності від даного порівняння. Є основою реалізації всіх безблокіровочних алгоритмів. Часто використовується в реалізації спінлоков і RWLockов, а також практично всіх високорівневих синхронізуючих елементів таких як Семафори, м'ютексів, Події та ін в якості внутрішньої реалізації
  • XCHG - Операція обміну між пам'яттю і регістром виконується атомарному на x86 Процесор. [3] Часто використовується в реалізації спінлоков.

Крім того, багато команд виду Читання-Модифікація-Запис можуть бути зроблені штучно атомарними за допомогою префікса LOCK [4] (опкод 0xF0):

  • Команди додавання і віднімання ADD / ADC / SUB / SBB де операнд-приймач пам'ять
  • Команди инкремента / декремента INC / DEC
  • Логічні команди AND / OR / XOR
  • Однооперандние команди NEG / NOT
  • Бітові операції BTS / BTR / BTC
  • Операція додавання і обмін XADD

Префікс LOCK викликає блокування доступу до пам'яті на час виконання інструкції. Блокування може поширюватися на область пам'яті ширше ніж довжина операнда, наприклад на довжину кеш-лінії.

Підтримка атомарних операцій в RISC процесорах

Особливістю RISC архітектур є відмова від використання інструкцій виду Читання-Модифікація-Запис. В RISC процесорах з архітектурою DEC Alpha. PowerPC. MIPS і ARM (ARMv6 і старше) підтримується механізм неблокуючим ексклюзивного доступу до пам'яті. Метод грунтується на парі інструкцій ексклюзивного читання-запису LL / SC:

  • завантаження з позначкою (LL - load linked),
  • спроба запису (SC - store conditional)

Атомарні інструкції і компілятор

Компілятори мов високого рівня ніколи при генерації коду не використовують атомарні інструкції, оскільки, по-перше, атомарні операції у багато разів дорожче звичайних, по-друге, у компілятора немає інформації, коли доступ повинен здійснюватися атомарними інструкціями (так як навіть модифікатор volatile змінної не означає реальної необхідності застосування атомарних операцій). З цієї причини, коли це є життєво необхідним, програміст використовує один з наступних підходів:

  1. Асемблерна вставка відповідної атомарної інструкції
  2. Використання розширення компілятора (функції сімейства __builtin_ або __sync_)
  3. Використання «високорівневою» обгортки у вигляді спеціальної бібліотеки, наприклад, Glib
  4. Використання нових мов C11 або C ++ 11. підтримують типи _Atomic і atomic і функції сімейства atomic_ [5]

Примітки

Дивитися що таке "Атомарна операція" в інших словниках:

Атомарні операції - атомарні операції операції, що виконуються як єдине ціле або не виконуються зовсім. Атомарність операцій має особливе значення в багатопроцесорних комп'ютерах (і багатозадачних операційних системах), так як доступ до неподільні ... ... Вікіпедія

SNMP - Назва: Simple Network Management Protocol Рівень (за моделлю OSI): Прикладної Сімейство: UDP Порт / ID: 161 / UDP, 162 / UDP Призначення протоколу: Управління мережевими пристроями Специфікація ... Вікіпедія

Атомарність - (в програмуванні) властивість безперервності операції. Атомарна операція виконується повністю (або відбувається відмова у виконанні), без переривань. Атомарність має особливе значення в багатопроцесорних комп'ютерах (і багатозадачних ... ... Вікіпедія

Регулярні вирази - (англ. Regular expressions, скор. RegExp, RegEx, жарг. Регекспи або регекси) це формальна мова пошуку і здійснення маніпуляцій з підрядками в тексті, заснований на використанні метасимволов (символів джокерів, ... ... Вікіпедія

Регекспів - Регулярні вирази (англ. Regular expressions, скор. RegExp, RegEx, жарг. Регекспи або регекси) система синтаксичного розбору текстових фрагментів по формалізованого шаблоном, заснована на системі запису зразків для пошуку. Зразок (англ. ... ... Вікіпедія

Регекси - Регулярні вирази (англ. Regular expressions, скор. RegExp, RegEx, жарг. Регекспи або регекси) система синтаксичного розбору текстових фрагментів по формалізованого шаблоном, заснована на системі запису зразків для пошуку. Зразок (англ. ... ... Вікіпедія

Регеспи - Регулярні вирази (англ. Regular expressions, скор. RegExp, RegEx, жарг. Регекспи або регекси) система синтаксичного розбору текстових фрагментів по формалізованого шаблоном, заснована на системі запису зразків для пошуку. Зразок (англ. ... ... Вікіпедія

Регулярки - Регулярні вирази (англ. Regular expressions, скор. RegExp, RegEx, жарг. Регекспи або регекси) система синтаксичного розбору текстових фрагментів по формалізованого шаблоном, заснована на системі запису зразків для пошуку. Зразок (англ. ... ... Вікіпедія

Схожі статті