Атомарная операция

Атомарная (греч. άτομος — неделимое) операция — операция, которая либо выполняется целиком, либо не выполняется вовсе; операция, которая не может быть частично выполнена и частично не выполнена.

В данной статье описываются простейшие атомарные операции (чтение, запись и т. п.), хотя термин может относиться к более высокоуровневым операциям, таким как, например, серия запросов к СУБД в рамках одной транзакции.

Атомарные операции используются в многопроцессорных компьютерах и в многозадачных операционных системах для обеспечения доступа нескольких процессов и/или нескольких потоков одного процесса к разделяемым между ними ресурсам. Атомарная операция выполняется только одним потоком.

Классификация

Атомарность операций может обеспечиваться аппаратно (аппаратурой) и программно (программным кодом). В первом случае используются особые машинные инструкции, атомарность выполнения которых гарантируется аппаратурой. Во втором случае используются специальные программные средства синхронизации, с помощью которых осуществляется блокировка разделяемого ресурса; после блокировки выполняется операция, которую требуется выполнить атомарно. Блокировка представляет собой атомарную операцию, которая либо предоставляет ресурс в пользование потоку, либо сообщает потоку о том, что ресурс уже используется другим потоком или процессом (занят).

Ассемблерные инструкции и атомарность

Машинные инструкции, выполнение которых всегда можно считать атомарным:

  • машинные инструкции для чтения данных из памяти по выровненному адресу и записи их в регистр общего назначения;
  • машинные инструкции для чтения данных из регистра общего назначения и записи их в память по выровненному адресу;
  • машинные инструкции, специально созданные для работы атомарно и обычно называемые атомарными инструкциями.

Машинные инструкции, которые не являются атомарными:

  • машинные инструкции для чтения/записи данных по невыровненному адресу (выполняя одну из таких инструкций, процессор вынужден выполнить обращение к двум ячейкам памяти. В момент, когда процессор обращается к одной ячейке, другая ячейка может быть изменена другим процессором);
  • все машинные инструкции вида «чтение-модификация-запись»[источник не указан 813 дней] (выполнение одной такой инструкции сводится к чтению данных из памяти, изменению данных в АЛУ и записи данных в память. После чтения данных из памяти содержимое памяти может измениться);
  • строковые машинные инструкции процессоров x86;
  • машинные инструкции push и pop процессоров x86;
  • машинные инструкции, работающие со специальными управляющими регистрами (подобные инструкции могут выполняться в течение нескольких процессорных тактов и порождать десятки или сотни обращений к памяти, используются только в системном программном обеспечении).

Атомарные инструкции процессоров x86

Атомарные инструкции процессоров архитектуры x86:

  • CMPXCHG, CMPXCHG8B, CMPXCHG16B — основная атомарная инструкция процессоров x86, выполняющая сравнение и обмен. При использовании с префиксом LOCK[1][2] атомарно сравнивает значение переменной с указанным значением и, в зависимости от результата сравнения, записывает в переменную указанное значение или ничего не делает. Является основой реализации всех безблокировочных алгоритмов, часто используется в реализации спинлоков, RWLock’ов и практически всех высокоуровневых синхронизирующих элементов, таких как семафоры, мьютексы, события и пр.;
  • XCHG — операция для обмена данными между регистром и ячейкой памяти или между двумя регистрами. Атомарность этой операции имеет значение в случае, когда операндом команды выступает ячейка памяти. На процессорах x86 выполняется атомарно даже без использования префикса LOCK[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).

Первая инструкция (LL) загружает данные из ячейки памяти в регистр и помечает ячейку, как ячейку для эксклюзивного доступа. Далее производятся необходимые изменения данных в регистре. Запись данных из регистра в память (SC) производится только в том случае, если значение ячейки памяти не менялось. Если значение менялось, три операции (LL, изменение данных и SC) следует повторить.

Атомарные инструкции и компиляторы

Компиляторы языков высокого уровня, как правило, не используют при генерации кода атомарные инструкции, поскольку, во-первых, атомарные операции во много раз более ресурсоёмкие, чем обычные, а во-вторых, у компилятора нет информации о том, когда доступ к данным должен осуществляться атомарно (так как даже модификатор volatile для переменной в языках C/C++ не означает реальной необходимости применения атомарных операций). В случае необходимости программист может использовать атомарные инструкции одним из следующих способов:

  1. вставить атомарные инструкции в код, используя предоставляемый компилятором ассемблер, например, GCC Inline Assembly компилятора gcc;
  2. использовать функции, предоставляемые компилятором и вызывающие атомарные инструкции, например, функции семейств __builtin_ или __sync_ компилятора gcc;
  3. использовать функции, предоставляемые библиотеками и вызывающие атомарные инструкции, например, функции библиотеки Glib;
  4. использовать языки программирования, поддерживающие атомарность, например, языки стандартов C11 и C++14, поддерживающие типы _Atomic и atomic и функции семейства atomic_[5].

См. также

Примечания

  1. CMPXCHG — Compare and exchange Архивная копия от 2 ноября 2012 на Wayback Machine.
  2. CMPXCHG8B — Compare and exchange 8 bytes Архивная копия от 30 ноября 2012 на Wayback Machine.
  3. http://faydoc.tripod.com/cpu/xchg.htm Архивная копия от 20 ноября 2012 на Wayback Machine «If a memory operand is referenced, the processor’s locking protocol is automatically implemented for the duration of the exchange operation, regardless of the presence or absence of the LOCK prefix or of the value of the IOPL.»
  4. Атомарные операции. История вопроса. Дата обращения: 12 ноября 2012. Архивировано 17 ноября 2012 года.
  5. Atomic operations library — cppreference.com. Дата обращения: 12 ноября 2012. Архивировано 13 августа 2015 года.

Ссылки

Read other articles:

BLITZENAsalJakarta Selatan, IndonesiaGenrePop, Dance pop, Indo-popTahun aktif2021 (2021) - sekarangLabelTO THE CLOUDSAnggotaSazuraAlyaViollaKalunaMantan anggotaEuraMichaelaYasha Blitzen (ditulis sebagai BLITZEN) adalah grup idola wanita Ipop dari Indonesia yang dibentuk oleh TO THE CLOUDS Entertainment, yang terdiri dari anggota Sazura, Alya, Kaluna, dan Violla. Grup ini debut pada 21 Oktober 2021 dengan single yang berjudul What's That About? dengan 3 anggota yaitu Michaela, Sazura, dan...

 

Не следует путать с Адольфом Гастоном Ойгеном Фиком — учёным, который изобрёл контактные линзы. В Википедии есть статьи о других людях с фамилией Фик. Адольф Ойген Фикнем. Adolf Eugen Fick Дата рождения 3 сентября 1829(1829-09-03) Место рождения Кассель, Германия Дата смерти 21 авгус

 

Kostolík Die Westwand des Kostolík Höhe 2262 m n.m. Lage Slowakei Gebirge Hohe Tatra Koordinaten 49° 9′ 42″ N, 20° 7′ 27″ O49.16166720.1241672262Koordinaten: 49° 9′ 42″ N, 20° 7′ 27″ O Kostolík (Slowakei) Der Kostolík (deutsch Kapelle, auch Kirchlein oder Kapellentürmchen, ungarisch Kápolna, auch Templomocska oder Koscielek, polnisch Kościołek)[1] ist ein 2262 m n.m. (nach ande...

MRU (англ. Maximum Receive Unit) — максимальний розмір даних, переданих в пакеті протоколу PPP, не включаючи заголовок пакета. Значення MRU визначається протоколом LCP, що входять в сімейство PPP і приймається за замовчуванням рівним 1500 октетів. У випадку, якщо запитується менше значен...

 

Parte final da maratona nos Jogos Olímpicos Intercalados de 1906. Nos Jogos Olímpicos Intercalados de 1906 em Atenas, 21 eventos do atletismo foram realizados, todos masculinos. Denominados Jogos Intercalados, a edição de 1906 não é considerada oficial pelo Comitê Olímpico Internacional. Medalhistas Masculino Evento Ouro Prata Bronze 100 metros Archie Hahn Estados Unidos Fay Moulton Estados Unidos Nigel Barker Austrália 400 metros Paul Pilgrim Estados Unidos Wyndham Halswelle Gr...

 

Констанція Арпадугор. Magyarországi Konstancia Біографічні даніНародження 17 лютого 1180Естергом, Естергом[d], Esztergom Countyd, Угорське королівствоСмерть 6 грудня 1240 (60 років)PředklášteřídПоховання Porta coeli ConventdУ шлюбі з Пржемисл I Оттокар[1]Діти Anne of Bohemia, Duchess of Silesiad, Вацлав I[1], Агнес

Tink ?Información generalParadigma EsotéricoApareció en 2008Diseñado por José María MéndezImplementaciones ProcessingInfluido por BrainfuckHa influido a ¿?[editar datos en Wikidata] Tink o Turing Ink (Tinta de Turing), es un lenguaje de programación esotérico, diseñado por José María Méndez en 2008. A diferencia de la mayoría de lenguajes de programación, está basado en el uso de colores, de tal forma que cada instrucción es representada por un píxel de determinad...

 

كوم القدح  -  قرية مصرية -  تقسيم إداري البلد  مصر المحافظة محافظة البحيرة المركز أبو المطامير المسؤولون السكان التعداد السكاني 8312 نسمة (إحصاء 2006) معلومات أخرى التوقيت ت ع م+02:00  تعديل مصدري - تعديل   قرية كوم القدح هي إحدى القرى التابعة لمركز أبو المطامير في ...

 

Sporting event delegationCosta Rica at the1968 Summer OlympicsIOC codeCRCNOCComité Olímpico de Costa RicaWebsitewww.concrc.org (in Spanish)in Mexico CityCompetitors18 (17 men, 1 woman) in 6 sportsMedals Gold 0 Silver 0 Bronze 0 Total 0 Summer Olympics appearances (overview)19361948–19601964196819721976198019841988199219962000200420082012201620202024 Costa Rica competed at the 1968 Summer Olympics in Mexico City, Mexico. Eighteen competitors, seventeen men and one woman, took part in ...

Geografi Italia BenuaEropa dan Afrika (Pulau Lampedusa dan Lampione)KawasanEropa SelatanKoordinat42°00′N 12°05′E / 42.000°N 12.083°E / 42.000; 12.083Koordinat: 42°00′N 12°05′E / 42.000°N 12.083°E / 42.000; 12.083Wilayah301,230 km² (116,3 mil²)97.61% daratan 2.39 % perairanPerbatasanTotal perbatasan darat 18.364 km (11.411 mi)Titik tertinggiGunung Blanc 4,810 m (15,78 ft)Titik terendahJolanda d...

 

Court system overview This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Judiciary of Belgium – news · newspapers · books · scholar · JSTOR (December 2013) (Learn how and when to remove this template message) Politics of Belgium Constitution Taxation Constitutional Court Monarchy Monarch (list) Philippe Duchess...

 

1927 film Knockout Reillylobby cardDirected byMalcolm St. ClairScreenplay byPierre CollingsJohn W. ConwayKenneth RaisbeckBased onThe Hunchby Albert Payson TerhuneProduced byWilliam LeBaronMalcolm St. ClairJesse L. LaskyAdolph ZukorStarringRichard DixMary BrianJack RenaultHarry GribbonCinematographyEdward CronjagerProductioncompanyFamous Players–Lasky CorporationDistributed byParamount PicturesRelease date April 16, 1927 (1927-04-16) Running time70 minutesCountryUnited StatesL...

Ganghaan:Pinulongan Ang Rinuso maoy pinulongang Indo-Urupanhon. Kinìng maong artikulo mao usa ka Saha. Makatábang ka sa Wikipedya pinaági sa pag-uswág ug pag-punô niini.thu Galeriya sa hulagway

 

You can help expand this article with text translated from the corresponding article in Hungarian. (April 2010) Click [show] for important translation instructions. View a machine-translated version of the Hungarian article. Machine translation, like DeepL or Google Translate, is a useful starting point for translations, but translators must revise errors as necessary and confirm that the translation is accurate, rather than simply copy-pasting machine-translated text into the English Wi...

 

Este artigo não cita fontes confiáveis. Ajude a inserir referências. Conteúdo não verificável pode ser removido.—Encontre fontes: ABW  • CAPES  • Google (N • L • A) (Agosto de 2016) Insígnia (Rondó) da Força Aérea da Hungria. MiG-29B da Força Aérea da Hungria. Caças JAS 39 húngaros. A Força Aérea da Hungria é o ramo aéreo das Forças armadas húngaras. História Período Pré-Segunda Guerra Mundial Seguindo a di...

Chinese chemical manufacturing company ABA Chemical CorporationNative name雅本化学FormerlySuzhou ABA Chemicals Co. LtdTypePublicTraded asSZSE: 300261 ABACHEMIndustryChemicalsFounded2006; 17 years ago (2006)[1]HeadquartersTaicang, Suzhou, Jiangsu, China[2]Number of locations6 faciliites (2017)[3]Key peopleCai Tong (Chairman/President)[3]Mao Haifeng (Vice President)Ma Lifan (Vice President)Number of employees1,073[2]Websiteabachem.co...

 

Questa pagina contiene una traduzione, completa o parziale, della pagina originale:«Template:Historical regions of Georgia» tratta da Wikipedia in inglese.La versione tradotta è dell'11-09-2009. Consulta la cronologia della pagina originale per conoscere l'elenco degli autori. --Carlog3 (msg) 14:21, 11 set 2009 (CEST)Rispondi[rispondi]

 

American painter This article is an orphan, as no other articles link to it. Please introduce links to this page from related articles; try the Find link tool for suggestions. (April 2022) Alejandro VigilanteBorn1964 (age 58–59)Buenos AiresNationalityArgentinean/ AmericanEducationNational School of Fine Arts Prilidiano PueyrredonNotable workE-mail is my art “Audrey Hepburn @ Tiffany’s”StyleInternet artMovementiArt MovementWebsitehttp://www.alejandrovigilante.com/ Alejandro Vi...

South Korean judoka Kim Min-jeongPersonal informationBorn (1988-08-08) 8 August 1988 (age 35)OccupationJudokaHeight1.79 m (5 ft 10 in)Weight95 kg (209 lb)SportCountry South KoreaSportJudoWeight class+78 kgAchievements and titlesOlympic Games5th (2016)World Champ. (2017)Asian Champ. (2016, 2019) Medal record Women's judo Representing  South Korea World Championships 2017 Budapest +78 kg Asian Games 2014 Incheon Women's team 2018 ...

 

2008 historical novel by David Benioff City of Thieves UK hardcover edition cover artworkAuthorDavid BenioffCountryUnited StatesLanguageEnglishGenreHistorical fictionPublisherViking/PenguinPublication date2008Pages258 pp.ISBN0-670-01870-8 City of Thieves is a 2008 historical fiction novel by David Benioff. It is, in part, a coming of age story set in the World War II siege of Leningrad. It follows the adventures of two youths as they desperately search for a dozen eggs at the behest of a Sovi...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!