Atomic műveletek - a

atomi műveletek

Atomic műveletek - műveletek fut, mint egy különálló egység, vagy nem fut. Atomic műveletek különösen fontos többprocesszoros számítógépek (és többfeladatos operációs rendszerek), valamint a hozzáférés nonsharable erőforrások mindig atomi.

Egy atomi művelet nyitott csak befolyásolja egy patak.

Atomicity hardver (ha folytonosság hardware) és a program használata során speciális eszközöket interprogram kölcsönhatás mutexek. szemafor). Lényegét tekintve szoftver biztosítja atomicitás két szakaszból áll: az erőforrás zár és a művelet végrehajtása. Blokkolás egy atomi művelet, hogy akár sikeres vagy visszaad egy foglalt üzenetet.

Gyakran az atomi művelet egy szerelő oktatás, de nem feltétlenül. Ennél is fontosabb, nem minden szerelő oktatás atomi.

Szerelési útmutató és atomos

Működés amelynek végrehajtása nem tekinthető mindig atomi:

Műveletek, amelyek nem atomi:

Atomic x86 utasítások

  • CMPXCHG / CMPXCHG8B / CMPXCHG16B - atomi parancsot x86-összehasonlítás és csere. Atomically végez összehasonlítást változó a megadott érték és szállítási függően ez az összehasonlítás. Az végrehajtásának alapját lock-mentes algoritmusok. Gyakran használják a végrehajtása spinlocks és RWLockov, valamint szinte minden magasabb szintű szinkronizáló elemek, mint például szemaforok, mutexes, események, stb egy belső megvalósítása
  • Xchg - működtetése közötti csere a memóriát, és a regiszter végezzük atomosán x86-processzorok. Gyakran használják a végrehajtása spinlocks

Ezen kívül sok fajta parancsok olvasható módosítsa-írási művelet lehet mesterségesen atomi prefix LOCK (opkódot 0xF0):

  • ADD / ADC / SUB / SBB az összeadás és kivonás parancsokat, ha a memória operandus vevő
  • Command növelő / csökkentő INC / DEC
  • Csapat Logic ÉS / VAGY / XOR
  • Odnooperandnye csapat NEG / NEM
  • Bit művelet BTS / BTR / BTC
  • Amellett, és a csere XADD

Atomic utasításokat és fordító

Compiler magas szintű nyelvi soha kódgenerálást nem használ atomi utasításokat, mert egyrészt az atomi műveletek sokszor drágább, mint a normál, és másodszor is a fordító nincs információnk hozzáférést kell elvégeznie atomi utasítások (mivel még a módosító illékony változó nem jelent valódi szükségességét atomi műveletek). Emiatt, ha ez lényeges, a programozó használja az alábbi módszerek:

  1. Assembler behelyezése a megfelelő atomi utasításokat
  2. Segítségével __builtin_ - compiler bővítmények
  3. Használd a „magas szintű” csomagolja bármilyen könyvtári

Kapcsolódó cikkek