атомни операции
Атомни операции - операции, които работят като едно цяло или не работят изобщо. Атомни операции е особено важно в мулти-процесорни компютри (и многозадачност операционни системи), както и достъп до ресурси nonsharable трябва винаги да е атомна.
Атомната операция се отвори само влияе върху един поток.
Валентност е хардуер (когато приемственост се осигурява от хардуер) и програма при използване на специални разузнавателни средства interprogram взаимодействие мутекс. семафор). В основната си софтуер, за да се гарантира, атомност два етапа: заключването на ресурсите и изпълнението на операцията. Блокирането е атомна операция, че или е загубила или връща съобщение за заето.
Често атомния операцията е инструкция на асемблер, но не е задължително. Също така, по-важното е, че не всеки асемблер инструкция е атомна.
Инструкции за монтаж и валентност
Операция за изпълнението на които може да се счита винаги атомната:
Операции, които не са атомно:
Атомни инструкции x86
- CMPXCHG / CMPXCHG8B / CMPXCHG16B - основен атомната сравнение команда x86 и обмен. Атомно изпълнява променлива сравнение с определена стойност и пратката в зависимост от това сравнение. Е основа за прилагането на заключване без алгоритми. Често се използва при прилагането на spinlocks и RWLockov, както и почти всички елементи, по-високо ниво за синхронизация като семафори, mutexes, събития и др във вътрешна реализация
- XCHG - Експлоатация на размяна между паметта и регистъра е изпълнено автоматично на x86 процесори. Често се използва при прилагането на spinlocks
В допълнение, много видове команди за четене и запис променят операция може да се направи изкуствено с помощта на атомна префикс LOCK (Кодът 0xF0):
- Добави / ADC / SUB / SBB на събиране и изваждане команди където операнд приемника на паметта
- Command увеличаване / намаляване INC / декември
- Екип Logic И / ИЛИ / XOR
- Odnooperandnye отбор NEG / НЕ
- експлоатация Bit BTS / БТР / БТК
- Събиране и обмен XADD
Атомни инструкции и съставител
никога език Compiler високо равнище в генериране на код не използва атомни инструкции, тъй като, от една страна, на атомните операции са много пъти по-скъпи от нормалното, и второ, да има компилаторът не разполагат с информация, когато достъп трябва да се извършва от атомни инструкции (като дори модификатора летлив променлива не означава реално необходимостта от атомни операции). Поради тази причина, когато тя е от съществено значение, програмистът използва един от следните начини:
- Assembler поставяне на съответните атомни инструкциите
- Използването __builtin_ - разширения компилатора
- Използвайте "високо ниво" увийте всички библиотека
Свързани статии