Ця стаття не містить . (лютий 2020) |
Інструкція compare-and-swap (CAS) використовується в інформатиці як атомарна (тобто безперервна) операція для такої послідовності дій: порівняння значення у пам'яті із заданим значенням і якщо вони рівні, то запис у пам'ять нового значення.
Ця інструкція може використовуватись для реалізації таких примітивів синхронізації, як семафор та м'ютекс, а також для алгоритмів без блокувань. CAS еквівалентна , в тому сенсі, що існує алгоритм без блокувань з фіксованою кількістю викликів однієї з них, що реалізує функціональність іншої.
Зазвичай, алгоритми, що використовують CAS, зчитують старе значення і на його основі обчислюють нове, а потім використовують CAS для збереження нового значення. Якщо операція CAS завершується невдачею (оскільки зчитане значення вже устаріло), тоді потрібно почати все спочатку.
Операція CAS може застосовуватись для реалізації .
ABA проблема
Може так статись, що між зчитування старого значення та встановленням нового (за допомогою CAS) значення буде змінене, а потім повернуте до початкового значення. Для захисту від таких випадків потрібно використовувати подвійний CAS, друге значення повинне бути лічильником змін.
Реалізації
- CAS є в (IBM System/370) та її наступниках.
- є в інструкціях x86, починаючи з Intel 80486.
- SPARC 32 та PA-RISC єдині архітектури, що не підтримують CAS.
Більшість компіляторів C11 підтримують compare_and_swap використовуючи <stdatomic.h>
Джерела
- .NET Class methods Interlocked::CompareExchange [ 4 березня 2016 у Wayback Machine.].
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno lyutij 2020 Instrukciya compare and swap CAS vikoristovuyetsya v informatici yak atomarna tobto bezperervna operaciya dlya takoyi poslidovnosti dij porivnyannya znachennya u pam yati iz zadanim znachennyam i yaksho voni rivni to zapis u pam yat novogo znachennya Cya instrukciya mozhe vikoristovuvatis dlya realizaciyi takih primitiviv sinhronizaciyi yak semafor ta m yuteks a takozh dlya algoritmiv bez blokuvan CAS ekvivalentna v tomu sensi sho isnuye algoritm bez blokuvan z fiksovanoyu kilkistyu viklikiv odniyeyi z nih sho realizuye funkcionalnist inshoyi Zazvichaj algoritmi sho vikoristovuyut CAS zchituyut stare znachennya i na jogo osnovi obchislyuyut nove a potim vikoristovuyut CAS dlya zberezhennya novogo znachennya Yaksho operaciya CAS zavershuyetsya nevdacheyu oskilki zchitane znachennya vzhe ustarilo todi potribno pochati vse spochatku Operaciya CAS mozhe zastosovuvatis dlya realizaciyi ABA problemaMozhe tak statis sho mizh zchituvannya starogo znachennya ta vstanovlennyam novogo za dopomogoyu CAS znachennya bude zminene a potim povernute do pochatkovogo znachennya Dlya zahistu vid takih vipadkiv potribno vikoristovuvati podvijnij CAS druge znachennya povinne buti lichilnikom zmin RealizaciyiCAS ye v IBM System 370 ta yiyi nastupnikah ye v instrukciyah x86 pochinayuchi z Intel 80486 SPARC 32 ta PA RISC yedini arhitekturi sho ne pidtrimuyut CAS Bilshist kompilyatoriv C11 pidtrimuyut compare and swap vikoristovuyuchi lt stdatomic h gt Dzherela NET Class methods Interlocked CompareExchange 4 bereznya 2016 u Wayback Machine