Атомната (от гръцката атом 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 ++ език не означава реална нужда да се използват атомни операции). Ако е необходимо, програмистът може да използва атомни инструкции по следните начини:
- поставете атомни инструкции в код с помощта на компилатор, предоставена от асемблер. например, GCC Пътека събрание GCC компилатор;
- използвате функциите, предвидени от компилатора и да причини атомни инструкции, например, едно семейство от функции __builtin_ или __sync_ GCC компилатор;
- използвате функциите, предлагани от библиотеките и причиняване на атомни инструкции, например, нагъл библиотечните функции;
- използват езиците за програмиране, които поддържат валентност, например, езици C11 стандарт и C ++ 14. Поддържани _Atomic и атомно и функция на семейството atomic_.
Свързани статии