ПредишенСледващото

Атомната (от гръцката атом atomos - неделими.) Операция - операция, която се извършва напълно или не извършва при всички; операция, която може да се извърши частично или частично прилагане.

Тази статия описва най-простите операции атомни (увеличение, четат, пишат, и т. П.), Въпреки че терминът може да се отнася до операции на по-високо ниво, като например серия от заявки към базата данни в една транзакция.

Атомни операции се използват в многопроцесорни компютри и многозадачност операционни системи, за да получите достъп до множество процеси и / или множество потоци от един процес, за да споделят ресурси между тях. Един атомен операция се извършва само една нишка.

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

Инструкции за монтаж и атомност Редактиране

инструкции за машини, които винаги могат да се считат атомната:

инструкции за машини, които не са атомно:

Атомни процесори x86 инструкции Редактиране

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

  • CMPXCHG, CMPXCHG8B, CMPXCHG16B - основни атомни инструкции x86 процесори. извършване на сравнение и обмен. При използване на LOCK префикс с атомно сравнява стойността на променливата с определената и в зависимост от резултата от сравнението, пише в променливи, посочени стойност или не прави нищо. Е основа за прилагането на заключване без алгоритми. често се използва при прилагането на spinlocks. RWLock'ov и почти всички елементи по-високо ниво за синхронизация, като семафори, mutexes, събития и др.;
  • XCHG - операция за четене на данни от регистър или памет, както и писане на данни в регистър или памет. На x86 процесори е изпълнено автоматично. Често се използва при прилагането на spinlocks.

В допълнение, много видове машинни инструкции "четене и запис модифицира" извършва атомно в присъствието на заключването на префикс (Кодът 0xF0), като например следните:

LOCK префикс причинява заключването на достъп до паметта за времето на обучение. Заключване може да бъде разпределен в паметта по-голям от дължината на операнд, например, от дължината на кеша линията.

Атомни инструкции RISC процесор Редактиране

Основната особеност на този процесор архитектура RISC не е вид инструкция "за четене и запис променят." Процесорът RISC архитектури декември Алфа. PowerPC. MIPS и ARM (ARMv6 и повече) механизъм се поддържа nonblocking изключителен достъп до паметта. Атомни операции се осъществяват с помощта на чифт LL и SC изключителен инструкции за четене и запис, както следва:

  • товарене маркиран (LL - товар, свързан);
  • промените на данните;
  • опитвайте да пишете (SC - съхранява условно).

Първата инструкция (LL) данните зарежда от паметта в регистър, и маркира клетката като клетка за изключителен достъп. Следваща произвежда необходимите промени в регистъра на данни. Напиши данни от регистъра на паметта (SC) се извършва само, ако стойността на клетката памет не се променя. Ако стойността се променя, трите операции (LL, модификация данни и SC) трябва да се повторят.

Атомна инструкции и компилатори Редактиране

езикови компилатори на високо равнище. като правило, не се използва по време на поколение код атомни инструкции, тъй като, от една страна, на атомните операции е много повече от обикновено, и второ, на компилатора, че няма данни за това, кога достъп до данните, трябва да се извършва с атомна ресурсоемки (тъй като дори летливи модификатор на променлива в C / C ++ език не означава реална нужда да се използват атомни операции). Ако е необходимо, програмистът може да използва атомни инструкции по следните начини:

  1. поставете атомни инструкции в код с помощта на компилатор, предоставена от асемблер. например, GCC Пътека събрание GCC компилатор;
  2. използвате функциите, предвидени от компилатора и да причини атомни инструкции, например, едно семейство от функции __builtin_ или __sync_ GCC компилатор;
  3. използвате функциите, предлагани от библиотеките и причиняване на атомни инструкции, например, нагъл библиотечните функции;
  4. използват езиците за програмиране, които поддържат валентност, например, езици C11 стандарт и C ++ 14. Поддържани _Atomic и атомно и функция на семейството atomic_.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!