Кіріспе

Қос салыстыру және ауыстыру (DCAS немесе CAS2) – белгілі бір параллель бағдарламалау техникаларын қолдау үшін ұсынылған атомдық примитив. DCAS екі міндетті түрде бірімен-бірі жалғасқан емес жад орнын алып, жаңа мәндерді тек алдын ала берілген "күтілетін" мәндермен сәйкес келген жағдайда ғана жазады; осылайша, ол әлдеқайда танымал салыстыру және ауыстыру (CAS) операциясының кеңейтілген нұсқасы болып табылады. DCAS кейде x86 CMPXCHG16B сияқты нұсқаулармен іске асырылатын екі есе кең салыстыру және ауыстыру (DWCAS) операциясымен шатастырылады. Мұнда талқыланған DCAS әдетте көрсеткіш мөлшеріндегі екі жеке жад орнын басқарады, ал DWCAS екі жапсарлас көрсеткіш мөлшеріндегі жад орындарын басқарады. Докторлық диссертациясында Майкл Гринвальд DCAS-ты заманауи аппараттық құралға қосуды ұсынды, оның арқасында оңай қолданылатын, бірақ тиімді бағдарламалық транзакциялық жадты (STM) құруға болатынын көрсетті. Гринвальд DCAS-тың CAS-қа қарағандағы артықшылығы – DCAS арқылы жоғары ретті (көп элементті) CASn операциясын O(n) уақытында іске асыруға болатыны, ал біртұтас CAS үшін O(n log p) уақыты қажет екенін айтады, мұнда p – бәсекелес процестердің саны. DCAS-тың бір артықшылығы – атомдық екі басты тізімдерді (яғни, екі бағытты тізімдерді) салыстырмалы түрде оңай іске асыру мүмкіндігі. Дегенмен, жақында ғана CAS-ты қолдана отырып, ұқсас қасиеттері бар STM-ді іске асыруға болатыны көрсетілді. Бірақ, жалпы алғанда, DCAS – түйіншесі жоқ шешім емес: оны пайдалану арқылы құлыптамау және күтусіз алгоритмдерді іске асыру, әдетте, CAS сияқты күрделі және қатеге ұшырауға бейім. Motorola бір кезде DCAS-ты 68k сериялы процессорлар үшін жасалған нұсқаулар жиынтығына енгізген; алайда, DCAS-тың басқа примитивтерге қарағанда баяу жұмыс істеуі (кэшпен жұмыс істеу мәселелеріне байланысты) практикалық жағдайларда одан бас тартуға әкелді. Қазіргі кезде DCAS ешбір кең таралған процессорда тікелей қолдау көрсетілмейді. DCAS-ты екіден астам адреске кеңейту кейде MCAS (көп сөзді CAS) деп аталады; MCAS-ты LL/SC операциясын біріктіру арқылы іске асыруға болады, бірақ мұндай примитив аппараттық құралда тікелей қол жетімді емес. 2013 жылы Тревор Браун, Фейт Эллен және Эрик Руперт бағдарламалық жасақтамада LL/SC кеңейтуін (олар LLX/SCX деп атады) іске асырды, ол MCAS-қа қарағанда шектеулі болғанымен, автоматтандырылған кодты жасау арқылы ең жақсы өнімділік көрсеткен екілік іздеу ағашын (нақтырақ айтқанда, хроматикалық ағаш) іске асыруға мүмкіндік берді, JDK CAS негізіндегі тізімді сәл басып өтті. Жалпы, DCAS-ты экспрессивті аппараттық транзакциялық жад қамтамасыз ете алады. IBM POWER8 және Intel TSX транзакциялық жадты іске асыруды ұсынады. Sun компаниясының жобасынан бас тартылған Rock процессоры да оны қолдауға тиіс болған.