{"id":195948,"date":"2013-10-08T10:02:07","date_gmt":"2013-10-08T06:02:07","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=195948"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=195948","title":{"rendered":"<span class=\"post_title\">Lock-free \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0441\u043d\u043e\u0432\u044b: \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/312\/d18\/59f\/312d1859faa5e26e0d7e08d162a796dc.jpg\" align=\"right\"\/><br \/>  \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 lock-free \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0438\u0436\u0434\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0443\u0445 \u043a\u0438\u0442\u0430\u0445 \u2013 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430\u0445.<\/p>\n<p>  <b>\u0410\u043d\u043e\u043d\u0441<\/b>. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0442\u0435\u043f\u043b\u044b\u0439 \u043f\u0440\u0438\u0435\u043c <a href=\"http:\/\/habrahabr.ru\/company\/ifree\/blog\/195770\/\">\u041d\u0430\u0447\u0430\u043b<\/a>! \u0412\u0438\u0436\u0443, \u0447\u0442\u043e \u0442\u0435\u043c\u0430 lock-free \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0445\u0430\u0431\u0440\u0430\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443, \u044d\u0442\u043e \u043c\u0435\u043d\u044f \u0440\u0430\u0434\u0443\u0435\u0442. \u042f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u043f\u043e \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443, \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u043e\u0442 \u043e\u0441\u043d\u043e\u0432 \u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c, \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044f \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0434\u043e\u043c \u0438\u0437 libcds. \u041d\u043e \u0447\u0430\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <s>\u0437\u0440\u0435\u043b\u0438\u0449<\/s> \u043d\u0435 \u043c\u0435\u0448\u043a\u0430\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u0443\u0441\u043e\u043b\u0438\u0432\u0430\u044f. \u042f \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0432 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u0440\u0435\u0437\u043e\u043d. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435, \u0438 \u043c\u043d\u0435 \u043d\u0435 \u0442\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 <a href=\"http:\/\/www.boost.org\/\">boost<\/a>, \u2014 \u043e\u043f\u0438\u0448\u0438\u0442\u0435, \u043a\u0430\u043a \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c! \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u043e\u0439 \u044d\u043f\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0446\u0438\u043a\u043b \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044e \u043d\u0430 \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438: <i>\u041e\u0441\u043d\u043e\u0432\u044b<\/i>, <i>\u0412\u043d\u0443\u0442\u0440\u0438<\/i> \u0438 <i>\u0418\u0437\u0432\u043d\u0435<\/i>. \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044d\u043f\u043e\u043f\u0435\u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0447\u0430\u0441\u0442\u0435\u0439. \u0412 <i>\u041e\u0441\u043d\u043e\u0432\u0430\u0445<\/i> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u0432\u0435\u0449\u0430\u0445, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432; \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0447\u0435\u043c\u0443\u0447\u0435\u043a \u0432\u0440\u043e\u0434\u0435 \u043c\u0435\u043d\u044f. <i>\u0412\u043d\u0443\u0442\u0440\u0438<\/i> \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0432\u0435\u0449\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0432 \u043c\u0438\u0440\u0435 lock-free, \u2014 \u044d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0442\u0435\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c lock-free \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, libcds \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0438\u0441\u0447\u0435\u0440\u043f\u0430\u0435\u043c\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c C++ \u043a\u043e\u0434\u0430. \u0412 <i>\u0418\u0437\u0432\u043d\u0435<\/i> \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f libcds, \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0441\u043e\u0432\u0435\u0442\u044b \u0438 FAQ. <i>\u0418\u0437\u0432\u043d\u0435<\/i> \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u0448\u0438\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438\/\u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c\u0438\/\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0434\u043e\u0440\u043e\u0433\u0438\u0435 \u0445\u0430\u0431\u0440\u0430\u0436\u0438\u0442\u0435\u043b\u0438.<\/p>\n<p>  \u0410 \u043f\u043e\u043a\u0430 \u044f \u0441\u0443\u0434\u043e\u0440\u043e\u0436\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u043b\u044e \u043d\u0430\u0447\u0430\u043b\u043e <i>\u0418\u0437\u0432\u043d\u0435<\/i>, \u2014 \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c <i>\u041e\u0441\u043d\u043e\u0432<\/i>. \u0421\u0442\u0430\u0442\u044c\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043d\u0435 \u043e C++ (\u0445\u043e\u0442\u044f \u0438 \u043e \u043d\u0435\u043c \u0442\u043e\u0436\u0435) \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e lock-free (\u0445\u043e\u0442\u044f \u0431\u0435\u0437 atomic lock-free \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b), \u0430 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 \u0438 \u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. <br \/>  \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 <s>\u043a\u0440\u0443\u0433 \u0430\u0434\u0430<\/s> \u043d\u0438\u0437\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0438\u0437 \u0434\u0432\u0443\u0445.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u2014 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (read-modify-write, RMW). \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u0430\u043a \u043d\u0435\u0434\u0435\u043b\u0438\u043c\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e: \u043e\u043d\u0430 \u043b\u0438\u0431\u043e \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430, \u043b\u0438\u0431\u043e \u0435\u0449\u0451 \u043d\u0435\u0442; \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0442\u0430\u0434\u0438\u0439 \u0435\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c\u0438; \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0435\u0432\u044b\u0440\u0430\u0432\u043d\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c: \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 x86 \u0442\u0430\u043a\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e, \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u044f\u043c\u0438, \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445 (Sparc, Intel Itanium) \u2013 \u043a \u0444\u0430\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435 (segmentation fault), \u043a\u043e\u0442\u043e\u0440\u0443\u044e, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u043e \u043e\u0431 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0447\u0438 \u0437\u0434\u0435\u0441\u044c \u0431\u044b\u0442\u044c \u0443\u0436\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442. \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u043e\u043b\u044c\u043a\u043e <b>\u0432\u044b\u0440\u0430\u0432\u043d\u0435\u043d\u043d\u044b\u0445<\/b> \u043f\u0440\u043e\u0441\u0442\u044b\u0445 (integral) \u0442\u0438\u043f\u043e\u0432 \u2013 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0445\u043e\u0442\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0432\u044b\u0440\u0430\u0432\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a \u0446\u0435\u043b\u043e\u043c\u0443, \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0443\u0434\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 (\u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0432\u043b\u0435\u0437\u0430\u044e\u0449\u0435\u0439 \u0432 4 \u2013 8 \u0431\u0430\u0439\u0442), \u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0430\u043c\u0438\u043c \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 (\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432) \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 (\u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445\/\u0442\u0438\u043f\u043e\u0432). \u041a\u0441\u0442\u0430\u0442\u0438, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"http:\/\/libcds.sourceforge.net\">libcds<\/a> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0431\u043e\u0440 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>Compare-and-swap<\/h2>\n<p>  \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c lock-free \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e (\u043c\u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 RMW-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0435\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043d\u0435\u0451: compare-and-swap (CAS), fetch-and-add (FAA), test-and-set (TAS) \u0438 \u043f\u0440. \u0412 \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f compare-and-swap (CAS) \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0431\u0430\u0437\u043e\u0432\u0430\u044f; \u0435\u0451 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u043f\u0440\u043e\u0441\u0442:  <\/p>\n<pre><code>bool CAS( int * pAddr, int nExpected, int nNew ) atomically {     if ( *pAddr == nExpected ) {          *pAddr = nNew ;          return true ;     }     else         return false ;  } <\/code><\/pre>\n<p>  \u0421\u043b\u043e\u0432\u0430\u043c\u0438: \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>pAddr<\/code> \u0440\u0430\u0432\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u043c\u0443 <code>nExpected<\/code>, \u0442\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>nNew<\/code> \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442\u044c <code>true<\/code>, \u0438\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442\u044c <code>false<\/code>, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0434\u0435\u043b\u0438\u043c\u043e \u0438 \u0431\u0435\u0437 \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432. \u0427\u0435\u0440\u0435\u0437 CAS \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 RMW-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, fetch-and-add \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code>int FAA( int * pAddr, int nIncr ) {      int ncur ;      do {           ncur = *pAddr ;      } while ( !CAS( pAddr, ncur, ncur + nIncr ) ;      return ncur ; } <\/code><\/pre>\n<p>  \u201c\u0410\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439\u201d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 CAS \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u0435\u043d \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u0432\u0435\u0434\u044c \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u0435 CAS \u043d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0436\u0435 \u0437\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0430\u0441\u0442\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 CAS (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <i>valued CAS<\/i>, \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e):  <\/p>\n<pre><code>int CAS( int * pAddr, int nExpected, int nNew ) atomically {       if ( *pAddr == nExpected ) {            *pAddr = nNew ;            return nExpected ;        }        else             return *pAddr  } <\/code><\/pre>\n<p>  \u0412 C++11 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>compare_exchange<\/code> (\u0441\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0432 C++11 \u043d\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0435\u0441\u0442\u044c \u0435\u0451 \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438 <code>compare_exchange_strong<\/code> \u0438 <code>compare_exchange_weak<\/code>, \u043d\u043e \u043e\u0431 \u043d\u0438\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0437\u0436\u0435) \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0430 \u044d\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:  <\/p>\n<pre><code>bool compare_exchange( int volatile * pAddr, int& nExpected, int nNew ); <\/code><\/pre>\n<p>  \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>nExpected<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>pAddr<\/code>, \u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u2013 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0443\u0441\u043f\u0435\u0445\u0430: <code>true<\/code>, \u0435\u0441\u043b\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>nExpected<\/code> (\u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <code>nNew<\/code>), <code>false<\/code> \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u0438 (\u0442\u043e\u0433\u0434\u0430 <code>nExpected<\/code> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>pAddr<\/code>). \u0422\u0430\u043a\u043e\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 CAS \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u201c\u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e\u201d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f CAS, \u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 <code>compare_exchange<\/code> \u0447\u0440\u0435\u0432\u0430\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>nExpected<\/code> \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e. <br \/>  \u0421 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>compare_exchange<\/code> \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 fetch-and-add, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a:  <\/p>\n<pre><code>int FAA( int * pAddr, int nIncr ) {      int ncur = *pAddr;      do {} while ( !compare_exchange( pAddr, ncur, ncur + nIncr ) ;      return ncur ; } <\/code><\/pre>\n<h2>ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/h2>\n<p>  \u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 CAS \u0432\u0441\u0435\u043c \u0445\u043e\u0440\u043e\u0448, \u043d\u043e \u043f\u0440\u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0430\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <i>ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b<\/i>. \u0414\u043b\u044f \u0435\u0451 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 CAS:  <\/p>\n<pre><code>int nCur = *pAddr ; while (true) {     int nNew = \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     if ( compare_exchange( pAddr, nCur, nNew ))         break; } <\/code><\/pre>\n<p>  \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u044b \u201c\u0434\u043e\u043b\u0431\u0438\u043c\u0441\u044f\u201d \u0432 \u0446\u0438\u043a\u043b\u0435 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 CAS \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442; \u0446\u0438\u043a\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u0435\u0436\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>pAddr<\/code> \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>nNew<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>pAddr<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/2f7\/80e\/462\/2f780e462dac593e5d79109139bce2fb.jpeg\" align=\"right\"\/><br \/>  ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043f\u043e\u0442\u043e\u043a X \u0447\u0438\u0442\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 A \u0438\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0417\u0430\u0442\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a, Y, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 B \u0438 \u043e\u043f\u044f\u0442\u044c \u043d\u0430 A, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c A \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u043e\u043a X \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430 CAS \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c (\u043f\u0440\u043e\u0447\u0442\u0435\u043d\u043d\u044b\u043c) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c A \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 CAS \u0443\u0441\u043f\u0435\u0448\u0435\u043d, \u043d\u043e A \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435! \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u0442\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u0447\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043a\u0440\u0430\u0445\u0443).<\/p>\n<p>  \u0412\u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f lock-free \u0441\u0442\u0435\u043a\u0430, \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u043e\u0433\u043e ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 [Mic04]:  <\/p>\n<pre><code>\/\/ Shared variables static NodeType * Top = NULL; \/\/ Initially null  Push(NodeType * node) {              do {  \/*Push1*\/ \t   NodeType * t = Top; \/*Push2*\/\t   node-&gt;Next = t; \/*Push3*\/   } while ( !CAS(&Top,t,node) ); }  NodeType * Pop() {            Node * next ;           do {  \/*Pop1*\/        NodeType * t = Top; \/*Pop2*\/        if ( t == null ) \/*Pop3*\/             return null; \/*Pop4*\/        next = t-&gt;Next; \/*Pop5*\/   } while ( !CAS(&Top,t,next) ); \/*Pop6*\/   return t; } <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u0442\u0435\u043a\u0430 (\u0437\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f, \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0430\u044f ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443):  <\/p>\n<table>\n<tr>\n<td><b>Thread X<\/b><\/td>\n<td><b>Thread Y<\/b><\/td>\n<\/tr>\n<tr>\n<td> \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>Pop()<\/code>. <br \/>   \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 <code>Pop4<\/code>, <br \/>   \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445:<code> t == A<\/code> <br \/>   <code> next == A-&gt;next<\/code>    <\/td>\n<td> <\/td>\n<\/tr>\n<tr>\n<td> <\/td>\n<td>  <code>NodeType * pTop = Pop()<\/code><br \/>  <code>pTop<\/code> == \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430, \u0442\u043e \u0435\u0441\u0442\u044c A<br \/>  <code>Pop()<\/code><br \/>  <code>Push( pTop )<\/code><br \/>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430 \u2013 \u0441\u043d\u043e\u0432\u0430 A<br \/>  \u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e <code>A-&gt;next<\/code> \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c   <\/td>\n<\/tr>\n<tr>\n<td> \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430 <code>Pop5<\/code>. <br \/>   CAS \u0443\u0441\u043f\u0435\u0448\u0435\u043d, \u043d\u043e \u043f\u043e\u043b\u044e <code>Top-&gt;next<\/code> <br \/>   \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, <br \/>   \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0432 \u0441\u0442\u0435\u043a\u0435, <br \/>   \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0442\u043e\u043a Y \u0432\u044b\u0442\u043e\u043b\u043a\u043d\u0443\u043b <br \/>   \u0438\u0437 \u0441\u0442\u0435\u043a\u0430 A \u0438 <code>A-&gt;next<\/code>,<br \/>   \u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>next<\/code><br \/>   \u0445\u0440\u0430\u043d\u0438\u0442 <i>\u0441\u0442\u0430\u0440\u043e\u0435<\/i> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>A-&gt;next<\/code>   <\/td>\n<td> <\/td>\n<\/tr>\n<\/table>\n<p>  ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2013 \u044d\u0442\u043e \u0431\u0438\u0447 \u0432\u0441\u0435\u0445 lock-free \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0435 CAS. \u041e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0432\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 A \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438 \u0437\u0430\u043c\u0435\u043d\u044b \u0435\u0433\u043e \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 (B), \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u043f\u044f\u0442\u044c \u043d\u0430 A (\u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &quot;<i>ABA<\/i>-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430&quot;), \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u0438\u0442 A (<code>delete A<\/code>), \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0435\u0442 <code>new<\/code> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439, \u0447\u0442\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 A (\u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0438 \u0441\u0434\u0435\u043b\u0430\u044e\u0442). \u0427\u0430\u0441\u0442\u043e \u043e\u043d\u0430 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u043e\u0449\u0440\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0435\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u043d\u0435 \u0434\u0432\u0430, \u0430 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (\u0432 \u044d\u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e ABCBA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435, ABABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0438 \u0442.\u0434., \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u0432\u0430\u0442\u0438\u0442 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438), \u0438 \u0435\u0451 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439. \u0421\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0431\u043e\u0440\u044c\u0431\u044b \u0441 ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u2013 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 <i>\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435<\/i> \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 (<i>deferred deallocation<\/i>, \u0438\u043b\u0438 <i>safe memory reclamation<\/i>) \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u0430\u044f \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f, \u0447\u0442\u043e \u043d\u0438\u043a\u0442\u043e (\u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432) \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445, \u043d\u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. <br \/>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 lock-free \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u0445\u0444\u0430\u0437\u043d\u044b\u043c:  <\/p>\n<ul>\n<li>\u041f\u0435\u0440\u0432\u0430\u044f \u0444\u0430\u0437\u0430 \u2013 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438\u0437 lock-free \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430;<\/li>\n<li>\u0412\u0442\u043e\u0440\u0430\u044f \u0444\u0430\u0437\u0430 (\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f) \u2013 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043d\u0435\u0433\u043e.<\/li>\n<\/ul>\n<p>  \u042f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0445\u0435\u043c\u0430\u0445 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439.<\/p>\n<h2>Load-Linked \/ Store-Conditional<\/h2>\n<p>  \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 CAS \u043f\u043e\u0434\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u043a \u043f\u043e\u0438\u0441\u043a\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 RMW-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043d\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u044b\u0445 ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435. \u0418 \u0442\u0430\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u2013 \u043f\u0430\u0440\u0430 <i>load-linked\/store-conditional<\/i> (LL\/SC). \u042d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b \u2013 \u0432\u043e\u0442 \u0438\u0445 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434:  <\/p>\n<pre><code>word LL( word * pAddr ) {       return *pAddr ; }  bool SC( word * pAddr, word New ) {       if ( \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 pAddr \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 LL) {            *pAddr = New ;            return true ;       }       else          return false ; } <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430 LL\/SC \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <i>load-linked<\/i> (LL) \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>pAddr<\/code>. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <i>store-conditional<\/i> (SC) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 LL \u0430\u0434\u0440\u0435\u0441 <code>pAddr<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 <code>pAddr<\/code> <i>\u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c<\/i> \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0447\u0442\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f <i>\u043b\u044e\u0431\u0430\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043a\u0435\u0448-\u043b\u0438\u043d\u0438\u0438<\/i>, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 <code>pAddr<\/code>. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u044b LL\/SC \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a\u0435\u0448\u0430: \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043a\u0430\u0436\u0434\u0430\u044f \u043a\u0435\u0448-\u043b\u0438\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0438\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u0430. \u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 LL \u044d\u0442\u043e\u0442 \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f (link), \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043a\u0435\u0448-\u043b\u0438\u043d\u0438\u044e (\u0438\u043b\u0438 \u0435\u0451 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0438 \u0438\u0437 \u043a\u0435\u0448\u0430) \u0431\u0438\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f SC \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u0442 \u0443 \u043a\u0435\u0448-\u043b\u0438\u043d\u0438\u0438: \u0435\u0441\u043b\u0438 \u0431\u0438\u0442 = 1, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u043a\u0435\u0448-\u043b\u0438\u043d\u0438\u044e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>pAddr<\/code> \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u043e\u0435 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f SC \u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u0438\u043d\u0430\u0447\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>pAddr<\/code> \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. <\/p>\n<p>  \u041f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 CAS \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u044b LL\/SC \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code>bool CAS( word * pAddr, word nExpected, word nNew ) {    if ( LL( pAddr ) == nExpected )       return SC( pAddr, nNew ) ;    return false ; } <\/code><\/pre>\n<p>  \u0417\u0430\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 CAS: \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043b\u0438\u0431\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043b\u0438\u0431\u043e <i>\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e<\/i> \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u0440\u044b LL\/SC \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 CAS, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430, \u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0430; \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0437\u0434\u0435\u0441\u044c \u0435\u0451 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u0442\u0441\u044b\u043b\u0430\u044e \u043a \u0441\u0442\u0430\u0442\u044c\u0435 [Mic04].<\/p>\n<p>  \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043b\u0430\u0433\u0435\u0440\u044f \u2013 \u043e\u0434\u043d\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 CAS-\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432, \u0434\u0440\u0443\u0433\u0438\u0435 \u2013 \u043f\u0430\u0440\u0443 LL\/SC. CAS \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445 x86, Intel Itanium, Sparc; \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 IBM System 370. \u041f\u0430\u0440\u0430 LL\/SC \u2013 \u044d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b PowerPC, MIPS, Alpha, ARM; \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0430 DEC. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 LL\/SC \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u0445 \u043d\u0435 \u0441\u0430\u043c\u044b\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u043b\u044c\u0437\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b LL\/SC \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0431\u0440\u043e\u0441\u044b \u0444\u043b\u0430\u0433\u0430 linked (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 false sharing, \u0441\u043c. \u043d\u0438\u0436\u0435), \u043d\u0435\u0442 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0444\u043b\u0430\u0433\u0430 linked \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u0440\u044b LL\/SC. <\/p>\n<p>  \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f C++, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 C++11 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0443 LL\/SC, \u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 <code>compare_exchang<\/code>e (CAS) \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u043e\u0442 \u043d\u0435\u0433\u043e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u2013 <code>fetch_add<\/code>, <code>fetch_sub<\/code>, <code>exchange<\/code> \u0438 \u043f\u0440. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c CAS \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e LL\/SC \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0430 \u0432\u043e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u2013 LL\/SC \u0447\u0435\u0440\u0435\u0437 CAS \u2013 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0436\u0438\u0437\u043d\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 C++, \u043a\u043e\u043c\u0438\u0442\u0435\u0442 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0432\u0435\u043b \u0432 C++ \u0442\u043e\u043b\u044c\u043a\u043e <code>compare_exchange<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 lock-free \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432.<\/p>\n<h2>False sharing<\/h2>\n<p>  \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 \u0434\u043b\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u043a\u044d\u0448\u0430 L (cache line) \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 64 \u2013 128 \u0431\u0430\u0439\u0442 \u0438 \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044e \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0432 \u043d\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u044f\u0445. \u041e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043a\u044d\u0448\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u043e L \u0431\u0430\u0439\u0442 (\u043e\u0431\u044b\u0447\u043d\u043e L \u2013 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0434\u0432\u043e\u0439\u043a\u0438). \u041f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0432 \u043b\u0438\u043d\u0438\u0438 \u043a\u044d\u0448\u0430 \u0432\u0441\u044f \u043b\u0438\u043d\u0438\u044f \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0439 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u042d\u0442\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u044d\u0448\u0435\u0439 \u0432 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0439\/ \u043c\u0443\u043b\u044c\u0442\u0438\u044f\u0434\u0435\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b MESI \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u044d\u0448\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 ([Cha05]), \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b MESI (Modified \u2014 Exclusive \u2014 Shared \u2013 Invalid) \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u044d\u0448\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 Intel \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u043b\u0438\u043d\u0438\u044e \u043a\u044d\u0448\u0430 \u043a\u0430\u043a \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u043d\u0443\u044e \u043f\u0440\u0438 <i>\u043a\u0430\u0436\u0434\u043e\u0439<\/i> \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u0443\u044e (shared) \u043b\u0438\u043d\u0438\u044e, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u043c\u0443 \u043e\u0431\u043c\u0435\u043d\u0443 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043b\u0438\u043d\u0438\u044e \u043a\u044d\u0448\u0430, MESI \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u044d\u0442\u0443 \u043b\u0438\u043d\u0438\u044e \u043a\u0430\u043a E (Exclusive), \u0447\u0442\u043e \u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0447\u0442\u0435\u043d\u0438\u0439\/\u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043b\u0438\u043d\u0438\u044e \u043a\u044d\u0448\u0430. \u0415\u0441\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0442\u0435\u043c \u0436\u0435 \u0441\u0430\u043c\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u043a\u044d\u0448\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, MESI \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u043b\u0438\u043d\u0438\u044e \u043a\u044d\u0448\u0430 \u043a\u0430\u043a S (Shared). \u0422\u0435\u043f\u0435\u0440\u044c \u043b\u044e\u0431\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u043a\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u0432 \u043b\u044e\u0431\u043e\u043c \u043a\u044d\u0448\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u043c\u0435\u0442\u043a\u0435 \u043b\u0438\u043d\u0438\u0438 \u043a\u0430\u043a M (Modified), \u0447\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0442\u043c\u0435\u0442\u043a\u0435 \u044d\u0442\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u043a\u0430\u043a I (Invalidate) \u0432 \u043a\u044d\u0448\u0430\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0435 MESI, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u0433\u0434\u0435 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0438 MESI.   <\/div>\n<\/div>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/a05\/952\/418\/a0595241819d89c1e65cc2497c74bf80.jpeg\" align=\"right\"\/><br \/>  \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043e\u0434\u043d\u0443 \u043b\u0438\u043d\u0438\u044e \u043a\u044d\u0448\u0430 (\u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u0430\u0445), \u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u043a \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043b\u0438\u043d\u0438\u0438 \u043a\u044d\u0448\u0430. \u042d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <i>false sharing<\/i> (\u043b\u043e\u0436\u043d\u0430\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0441\u0442\u044c). \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 LL\/SC false sharing \u0433\u0443\u0431\u0438\u0442\u0435\u043b\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 \u043b\u0438\u043d\u0438\u0439 \u043a\u044d\u0448\u0430: \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f Load-Linked \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 (link) \u043b\u0438\u043d\u0438\u044e \u043a\u044d\u0448\u0430, \u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f Store-Conditional \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043d\u0435 \u0441\u0431\u0440\u043e\u0448\u0435\u043d \u043b\u0438 \u0444\u043b\u0430\u0433 link \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438; \u0435\u0441\u043b\u0438 \u0444\u043b\u0430\u0433 \u0441\u0431\u0440\u043e\u0448\u0435\u043d, \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438 SC \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 false. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0438 L \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f, \u0442\u043e \u043b\u043e\u0436\u043d\u043e\u0435 <b>\u043d\u0435<\/b>\u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430 SC (\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0431\u0440\u043e\u0441 \u0444\u043b\u0430\u0433\u0430 link) \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043b\u0438\u043d\u0438\u0438 \u043a\u044d\u0448\u0430, \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c \u0441 \u0446\u0435\u043b\u0435\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2013 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <i>livelock<\/i>: \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b\/\u044f\u0434\u0440\u0430 \u0437\u0430\u043d\u044f\u0442\u044b \u043d\u0430 100%, \u043d\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043d\u0435\u0442. <\/p>\n<p>  \u0411\u043e\u0440\u044c\u0431\u0430 \u0441 false sharing \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430 (\u043d\u043e \u0440\u0430\u0441\u0442\u043e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430): \u043a\u0430\u0436\u0434\u0430\u044f shared-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u044e \u043a\u044d\u0448\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c; \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 (padding):  <\/p>\n<pre><code>struct Foo {        int volatile nShared1;        char   _padding1[64];\t \/\/ padding for cache line=64 byte        int volatile nShared2;        char   _padding2[64];\t \/\/ padding for cache line=64 byte }; <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u044d\u0448\u0430 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043d\u0430 CAS), \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b LL\/SC. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043a\u044d\u0448\u0430 (\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0434\u043b\u0438\u043d\u044b \u043b\u0438\u043d\u0438\u0438 \u043a\u044d\u0448\u0430); \u043f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c (\u201c\u043f\u043e\u0434 \u043a\u044d\u0448\u201d) \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a. <\/p>\n<h2>\u0420\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438 CAS<\/h2>\n<p>  \u041a\u0440\u0430\u0442\u043a\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0435\u0449\u0451 \u043d\u0430 \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430\u0445 \u2013 <i>CAS \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0448\u0438\u0440\u0438\u043d\u044b<\/i> (double-word CAS, dwCAS) \u0438 <i>\u0434\u0432\u043e\u0439\u043d\u043e\u0439 CAS<\/i> (DCAS).<\/p>\n<p>  <i>CAS \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0448\u0438\u0440\u0438\u043d\u044b<\/i> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 CAS, \u043d\u043e \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441 \u044f\u0447\u0435\u0439\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430: 64-\u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u0438 128-\u0431\u0438\u0442\u043e\u0432\u043e\u0439 (\u0442\u043e\u0447\u043d\u0435\u0435, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 96-\u0431\u0438\u0442\u043e\u0432\u043e\u0439) \u0434\u043b\u044f 64-\u0431\u0438\u0442\u043e\u0432\u044b\u0445. \u0414\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043f\u0430\u0440\u0443 LL\/SC \u0432\u043c\u0435\u0441\u0442\u043e CAS, LL\/SC \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b. \u0418\u0437 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u043c\u043d\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u0442\u043e\u043b\u044c\u043a\u043e x86 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 dwCAS. \u0427\u0435\u043c \u0436\u0435 \u0442\u0430\u043a \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432? \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u0445\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u044f ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u2013 <i>tagged pointers<\/i>. \u042d\u0442\u0430 \u0441\u0445\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0430 IBM \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u043c\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u0442\u0435\u0433\u0430 \u2013 \u0446\u0435\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430; tagged pointer \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439:  <\/p>\n<pre><code>template &lt;typename T&gt; struct tagged_pointer { \t  T *\tptr ; \t  uintptr_t tag ;      tagged_pointer()       : ptr( new T )       , tag( 1 )     {} }; <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u044b \u043f\u043e \u0434\u0432\u043e\u0439\u043d\u043e\u043c\u0443 \u0441\u043b\u043e\u0432\u0443: 8 \u0431\u0430\u0439\u0442 \u0434\u043b\u044f 32-\u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u0438 16 \u0431\u0430\u0439\u0442 \u0434\u043b\u044f 64-\u0431\u0438\u0442\u043e\u0432\u044b\u0445. \u0422\u0435\u0433 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u201c\u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438\u201d \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 <code>ptr<\/code>. \u042f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e tagged pointers \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439, \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043d\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u043c\u044f\u0442\u0438 (safe memory reclamation, SMR), \u0437\u0434\u0435\u0441\u044c \u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043c\u0435\u0447\u0443 \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e tagged pointers \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u0430 T (\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 <code>tagged_pointer<\/code>) \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c\u0441\u044f (<code>delete<\/code>), \u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0432\u043e free-list, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043d\u043e\u0432\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0441 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0433\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0434\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 ABA-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0443 \u043d\u0430\u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0442\u0435\u0433\u0435 \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438 (\u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f); \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 dwCAS \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c, \u0435\u0441\u043b\u0438 \u0432 \u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0442\u0438\u043f\u0430 <code>tagged_pointer<\/code> \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0440\u0430\u0432\u043d\u044b, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u0433\u043e\u0432 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u2013 <i>\u0434\u0432\u043e\u0439\u043d\u043e\u0439 CAS<\/i> (DCAS) \u2013 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0447\u0438\u0441\u0442\u043e \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440. \u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 DCAS \u0442\u0430\u043a\u043e\u0432:  <\/p>\n<pre><code>bool DCAS( int * pAddr1, int nExpected1, int nNew1,            int * pAddr2, int nExpected2, int nNew2 ) atomically {     if ( *pAddr1 == nExpected1 && *pAddr2 == nExpected2 ) {          *pAddr1 = nNew1 ;          *pAddr2 = nNew2 ;          return true ;     }     else          return false  } <\/code><\/pre>\n<p>  DCAS \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0434 \u0434\u0432\u0443\u043c\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043e\u0431\u043e\u0438\u0445, \u0435\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c\u0438. <\/p>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u0442\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c lock-free \u0434\u0432\u0443\u0441\u0432\u044f\u0437\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (deque, double-linked list), \u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0430\u0431\u043e\u0442, \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043d\u0430 DCAS. \u0425\u043e\u0442\u044f \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u0438 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u201c\u0432 \u0436\u0435\u043b\u0435\u0437\u0435\u201d, \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, [Fra03] \u2014 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u0438\u0437 \u043d\u0438\u0445), \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f DCAS (\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 multi-CAS \u0434\u043b\u044f \u0441\u043a\u043e\u043b\u044c \u0443\u0433\u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 <code>pAddr1<\/code> \u2026 <code>pAddrN<\/code>) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e CAS.<\/p>\n<h2>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/6bb\/58d\/2b5\/6bb58d2b519b6e14bedc48aa6edfff9b.jpeg\" align=\"right\"\/><br \/>  \u0410 \u043a\u0430\u043a \u043e\u0431\u0441\u0442\u043e\u0438\u0442 \u0434\u0435\u043b\u043e \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432? <br \/>  \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u044b \u0438 \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b, \u0447\u0442\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u0438 \u043d\u0435 \u0434\u0430\u044e\u0442 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b\u0445 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0445 \u0438\u043b\u0438 \u0438\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445, \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f, \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u0448\u0438\u043d\u0430\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u043f\u0440. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0430\u0431\u043e\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u044b \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0440\u0438\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432. \u042f \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438\u0437 [McKen05]. \u0412 \u044d\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0430\u0432\u0442\u043e\u0440\u044b, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430 CAS \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <code>nop<\/code> (no-operation). \u0418\u0442\u0430\u043a, \u0434\u043b\u044f Intel Xeon 3.06 \u0413\u0413\u0446 (\u043e\u0431\u0440\u0430\u0437\u0446\u0430 2005 \u0433\u043e\u0434\u0430) \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 400 nop, CAS \u2013 850 \u2013 1000 nop. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 IBM Power4 1.45 \u0413\u0413\u0446: 180 nop \u0434\u043b\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0433\u043e \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 250 nop \u0434\u043b\u044f CAS. \u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0440\u044b\u0435 (2005 \u0433\u043e\u0434), \u0437\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u0433\u043e\u0432 \u0432\u043f\u0435\u0440\u0435\u0434, \u043d\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0446\u0438\u0444\u0440, \u044f \u0434\u0443\u043c\u0430\u044e, \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c. <\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u044f\u0436\u0435\u043b\u043e\u0432\u0435\u0441\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u043e: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c\u0443 \u0434\u0435\u0440\u0435\u0432\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 CAS \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0437\u043b\u0430 \u0434\u0435\u0440\u0435\u0432\u0430, \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u044f \u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0435 \u0436\u0434\u0443 (\u0430 \u0442\u0430\u043a\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u044f \u0432\u0438\u0434\u0435\u043b). \u0421\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e, \u043f\u043e \u043c\u043e\u0438\u043c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f\u043c, \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u043d\u043e\u0432\u044b\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b Intel Core \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 CAS \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0451 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0432\u0438\u0434\u0438\u043c\u043e, \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b Intel \u043d\u0435\u043c\u0430\u043b\u043e \u0441\u0438\u043b \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442 \u0432 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. <\/p>\n<h2>Volatile \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>  \u0412 C++ \u0435\u0441\u0442\u044c \u0437\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u043e\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>volatile<\/code>. \u0418\u043d\u043e\u0433\u0434\u0430 <code>volatile<\/code> \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442 \u0441 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u0438\u0435\u043c \u2014 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0434 \u0441\u043e\u0431\u043e\u0439 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f. <br \/>  \u041f\u043e \u0441\u0443\u0442\u0438, <code>volatile<\/code> \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 (\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043e\u0447\u0435\u043d\u044c \u043b\u044e\u0431\u044f\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c: \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u2014 \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u044d\u0448\u0438\u0440\u0443\u044e\u0442). \u0422\u043e \u0435\u0441\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 volatile-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>\u0432\u0441\u0435\u0433\u0434\u0430<\/i> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438, \u0437\u0430\u043f\u0438\u0441\u044c volatile-\u043f\u0435\u0440\u0435\u043c\u043d\u043d\u043e\u0439 \u2014 <i>\u0432\u0441\u0435\u0433\u0434\u0430<\/i> \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c volatile-\u0434\u0430\u043d\u043d\u044b\u0435, \u043c\u044b \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0438\u043c. <br \/>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c. \u041f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043a\u0430\u043a \u0440\u0430\u0437 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0431\u0430\u0440\u044c\u0435\u0440\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 (Java, C#) <code>volatile<\/code> \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u043d\u0435 \u0432 C++11. \u0418 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f <code>volatile<\/code> \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0430 \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043b\u044f C++11-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 <code>volatile<\/code> \u0434\u043b\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u0437\u043b\u0438\u0448\u043d\u0435. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0435 <code>atomic<\/code>. \u0412 \u0442\u0430\u043a\u043e\u043c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">class atomic_int { \tint\tm_nAtomic;   \/\/\u2026. }; <\/code><\/pre>\n<p>  \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u043e \u00ab\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u00bb \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a <code>m_nAtomic<\/code> (\u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u0442 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e, \u0447\u0435\u0440\u0435\u0437 <code>this<\/code>). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043b\u0438\u0448\u043d\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c <code>int volatile m_nAtomic<\/code>.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">volatile-\u043c\u0435\u0442\u043e\u0434\u044b \u0432 C++<\/b><\/p>\n<div class=\"spoiler_text\">\u0418\u0437\u0443\u0447\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>atomic<\/code>, \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u043c\u0435\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>volatile<\/code>:  <\/p>\n<pre><code class=\"cpp\">void store( T val ) volatile ; <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u044d\u0442\u043e? \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <code>this<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>volatile<\/code> (\u0442\u043e \u0435\u0441\u0442\u044c, \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f <code>T * volatile<\/code>)? \u0412\u043e\u043e\u0431\u0449\u0435, \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u2014 <code>this<\/code> \u0447\u0430\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u0438 \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 ABI. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u0442\u0438\u043f <code>T volatile * <\/code>.<br \/>  \u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 <code>const<\/code>-\u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438, \u044d\u0442\u043e\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e <code>this<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 volatile-\u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435-\u0447\u043b\u0435\u043d\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <code>volatile<\/code> \u0432 \u0442\u0430\u043a\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435. \u0427\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c-\u0447\u043b\u0435\u043d\u0430\u043c. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a <code>volatile<\/code>.<br \/>  \u041d\u0443 \u0438 \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b <code>const<\/code> \u0438 <code>volatile<\/code> \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435. \u0412\u043e\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0432 <code>atomic&lt;T&gt;<\/code>:  <\/p>\n<pre><code>T load() const volatile ; <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<ul>\n<li><code>const<\/code> \u2014 \u043c\u0435\u0442\u043e\u0434 \u0441\u0430\u043c \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435-\u0447\u043b\u0435\u043d\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/li>\n<li><code>volatile<\/code> \u2014 \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435-\u0447\u043b\u0435\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u043a\u0435\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0445 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/li>\n<\/ul>\n<p>  <\/div>\n<\/div>\n<h2>libcds<\/h2>\n<p>  \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2013 \u0447\u0442\u043e \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <a href=\"http:\/\/libcds.sourceforge.net\">libcds<\/a>? \u0410 \u0438\u043c\u0435\u0435\u043c \u043c\u044b <s>\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434<\/s> \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0432 \u0434\u0443\u0445\u0435 C++11 \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 x86\/amd64, Intel Itanium \u0438 Sparc. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 C++11 <code>&lt;atomic&gt;<\/code> (\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u0435\u0439\u0448\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u2013 \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043c\u043d\u0435 \u044d\u0442\u043e GCC 4.7+, MS Visual C++ 2012, Clang 3.0+), \u0442\u043e <code>libcds<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u043c \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 lock-free \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u043c\u0438\u043c\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f CAS, \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f CAS \u043d\u0430\u0434 \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c (dwCAS). \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 DCAS (\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 multi-CAS) \u0432 <code>libcds<\/code> [\u043f\u043e\u043a\u0430] \u043d\u0435\u0442, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u2013 \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u043d\u0435\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c. \u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u043c, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f DCAS \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 [Fra03] \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430. \u041d\u043e \u0432\u0435\u0434\u044c \u044f \u0443\u0436\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u043b, \u0447\u0442\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u2013 \u0432\u0435\u0449\u044c \u0441\u0443\u0433\u0443\u0431\u043e \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0432 \u043c\u0438\u0440\u0435 lock-free: \u0442\u043e, \u0447\u0442\u043e \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0438 \u043d\u0430 \u044d\u0442\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043c \u0438\u043b\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0438\u043b\u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438!<\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <i>\u041e\u0441\u043d\u043e\u0432<\/i> \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u0438\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438 (memory ordering) \u2013 \u043e \u0431\u0430\u0440\u044c\u0435\u0440\u0430\u0445 \u043f\u0430\u043c\u044f\u0442\u0438 (memory fence, memory barrier).<\/p>\n<p>  C\u0441\u044b\u043b\u043a\u0438:<\/p>\n<p>  [Cha05] Dean Chandler <a href=\"http:\/\/software.intel.com\/sites\/default\/files\/m\/3\/4\/d\/7\/e\/29393-218129_218129.pdf\">Reduce False Sharing in .NET<\/a>, 2005, Intel Corporation<\/p>\n<p>  [Fra03] Keir Fraser <a href=\"http:\/\/www.cl.cam.ac.uk\/techreports\/UCAM-CL-TR-579.pdf\">Practical Lock Freedom<\/a>, 2004; technical report is based on a dissertation submitted September 2003 by K.Fraser for the degree of Doctor of Philosophy to the University of Cambridge, King&#8217;s College<\/p>\n<p>  [McKen05] Paul McKenney, Thomas Hart, Jonathan Walpole <a href=\"http:\/\/web.cecs.pdx.edu\/~walpole\/class\/cs533\/papers\/sosp2005.pdf\">Practical Concerns for Scalable Synchronization<\/a><\/p>\n<p>  [Mic04] Maged Michael <a href=\"http:\/\/www.research.ibm.com\/people\/m\/michael\/RC23089.pdf\">ABA Prevention using single-word instruction<\/a>, IBM Research Report, 2004<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Lock-free \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\"><a href=\"http:\/\/habrahabr.ru\/company\/ifree\/blog\/195770\/\">\u041d\u0430\u0447\u0430\u043b\u043e<\/a>  <\/div>\n<\/div>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/company\/ifree\/blog\/195948\/\"> http:\/\/habrahabr.ru\/company\/ifree\/blog\/195948\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/312\/d18\/59f\/312d1859faa5e26e0d7e08d162a796dc.jpg\" align=\"right\"\/><br \/>  \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 lock-free \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0438\u0436\u0434\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0443\u0445 \u043a\u0438\u0442\u0430\u0445 \u2013 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u0438 \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430\u0445.<\/p>\n<p>  <b>\u0410\u043d\u043e\u043d\u0441<\/b>. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0442\u0435\u043f\u043b\u044b\u0439 \u043f\u0440\u0438\u0435\u043c <a href=\"http:\/\/habrahabr.ru\/company\/ifree\/blog\/195770\/\">\u041d\u0430\u0447\u0430\u043b<\/a>! \u0412\u0438\u0436\u0443, \u0447\u0442\u043e \u0442\u0435\u043c\u0430 lock-free \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0445\u0430\u0431\u0440\u0430\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443, \u044d\u0442\u043e \u043c\u0435\u043d\u044f \u0440\u0430\u0434\u0443\u0435\u0442. \u042f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u043f\u043e \u0430\u043a\u0430\u0434\u0435\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443, \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u043e\u0442 \u043e\u0441\u043d\u043e\u0432 \u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c, \u043f\u043e\u043f\u0443\u0442\u043d\u043e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044f \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u0434\u043e\u043c \u0438\u0437 libcds. \u041d\u043e \u0447\u0430\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <s>\u0437\u0440\u0435\u043b\u0438\u0449<\/s> \u043d\u0435 \u043c\u0435\u0448\u043a\u0430\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u0443\u0441\u043e\u043b\u0438\u0432\u0430\u044f. \u042f \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u0432 \u044d\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u0440\u0435\u0437\u043e\u043d. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435, \u0438 \u043c\u043d\u0435 \u043d\u0435 \u0442\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 <a href=\"http:\/\/www.boost.org\/\">boost<\/a>, \u2014 \u043e\u043f\u0438\u0448\u0438\u0442\u0435, \u043a\u0430\u043a \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c! \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u043e\u0439 \u044d\u043f\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0446\u0438\u043a\u043b \u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044e \u043d\u0430 \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438: <i>\u041e\u0441\u043d\u043e\u0432\u044b<\/i>, <i>\u0412\u043d\u0443\u0442\u0440\u0438<\/i> \u0438 <i>\u0418\u0437\u0432\u043d\u0435<\/i>. \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044d\u043f\u043e\u043f\u0435\u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0447\u0430\u0441\u0442\u0435\u0439. \u0412 <i>\u041e\u0441\u043d\u043e\u0432\u0430\u0445<\/i> \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u0432\u0435\u0449\u0430\u0445, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432; \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0447\u0435\u043c\u0443\u0447\u0435\u043a \u0432\u0440\u043e\u0434\u0435 \u043c\u0435\u043d\u044f. <i>\u0412\u043d\u0443\u0442\u0440\u0438<\/i> \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0432\u0435\u0449\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0432 \u043c\u0438\u0440\u0435 lock-free, \u2014 \u044d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0442\u0435\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c lock-free \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, libcds \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0438\u0441\u0447\u0435\u0440\u043f\u0430\u0435\u043c\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c C++ \u043a\u043e\u0434\u0430. \u0412 <i>\u0418\u0437\u0432\u043d\u0435<\/i> \u0431\u0443\u0434\u0443\u0442 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f libcds, \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0441\u043e\u0432\u0435\u0442\u044b \u0438 FAQ. <i>\u0418\u0437\u0432\u043d\u0435<\/i> \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0432\u0430\u0448\u0438\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438\/\u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c\u0438\/\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0434\u043e\u0440\u043e\u0433\u0438\u0435 \u0445\u0430\u0431\u0440\u0430\u0436\u0438\u0442\u0435\u043b\u0438.<\/p>\n<p>  \u0410 \u043f\u043e\u043a\u0430 \u044f \u0441\u0443\u0434\u043e\u0440\u043e\u0436\u043d\u043e \u0433\u043e\u0442\u043e\u0432\u043b\u044e \u043d\u0430\u0447\u0430\u043b\u043e <i>\u0418\u0437\u0432\u043d\u0435<\/i>, \u2014 \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c <i>\u041e\u0441\u043d\u043e\u0432<\/i>. \u0421\u0442\u0430\u0442\u044c\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043d\u0435 \u043e C++ (\u0445\u043e\u0442\u044f \u0438 \u043e \u043d\u0435\u043c \u0442\u043e\u0436\u0435) \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043e lock-free (\u0445\u043e\u0442\u044f \u0431\u0435\u0437 atomic lock-free \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b), \u0430 \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445 \u0438 \u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432. <br \/>  \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 <s>\u043a\u0440\u0443\u0433 \u0430\u0434\u0430<\/s> \u043d\u0438\u0437\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0438\u0437 \u0434\u0432\u0443\u0445.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-195948","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/195948","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=195948"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/195948\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=195948"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=195948"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=195948"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}