سلام
اول باید بدانید که انجام افزایش یک واحد با سه دستور اسمبلی پباده سازی شده و بینشان می تواند وقفه رخ دهد.
در کل ۱۰ بار دستورinc باید اجرا بشه هر حلقه ۵ بار پس حداکثر مقداری که x می تواند بگیرد ۱۰ است.ولی این امکان وجود داره که بتوان تعدادی از عمل های جمع را خنثی کرد. مثلا فرایند A ابتدا اجرا صفر را در ثبات خود قرار می دهد و inc ولی قبل اینکه نتیجه رو که ۱ است در x قرار دهد به B سوئیج می شود و B مقدار X را ۰ می بیند و هر ۵ بار inc انجام و مقدار x برابر ۵ می شود اگر A دوباره اجرا شود از جای که وقفه خورده بود مقدار تباتش که ۱ است را در x قرار می دهد که ۱ می شود بعد ۴ بار دیگر Inc ودر کل ۵ می شود یعنی با این سناریو ۵ عمل جمع خنثی شد.
اینکه چرا x نمی تواند یک شود به این دلیل که باید در اخرین عمل inc در ۱۰ مورد مقدار x باید صفرباشد تا به ثبات منتقل شود وبعد اخرین inc انجام تا x یک شود که این غیر ممکن است چون قبل از این روند ۹ بار عمل inc انجام شده که در ان حداقل x یکبار در ثبات لود شده و inc .شده. اگر تعداد تکرار حلقه ها را کم کنیدبا مسئله ساده تر روبرو می شوید و سعی کنید در ببین انجام عمل افزایش بین دو فرایند سویئج کنید مثلا هر فرایند فقط یک بارX++ را اجر کند انوقت x می تواند مقدار ۱ هم بگیردو به ترتیب تعداد تکرار ها را زیاد و از سنارویو های مختلف سوئیج بین فرایند ها استفاده کنید.