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

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

Атомни операции - операции, които работят като едно цяло или не работят изобщо. Атомни операции е особено важно в мулти-процесорни компютри (и многозадачност операционни системи), както и достъп до ресурси 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 високо равнище в генериране на код не използва атомни инструкции, тъй като, от една страна, на атомните операции са много пъти по-скъпи от нормалното, и второ, да има компилаторът не разполагат с информация, когато достъп трябва да се извършва от атомни инструкции (като дори модификатора летлив променлива не означава реално необходимостта от атомни операции). Поради тази причина, когато тя е от съществено значение, програмистът използва един от следните начини:

  1. Assembler поставяне на съответните атомни инструкциите
  2. Използването __builtin_ - разширения компилатора
  3. Използвайте "високо ниво" увийте всички библиотека

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

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