وضعیت رقابتی: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
Rezabot (بحث | مشارکت‌ها)
LetsDoItBot (بحث | مشارکت‌ها)
تمیزکاری، + ویرایش با ماژول ابرابزار با استفاده از AWB
خط ۱:
[[پرونده:Race_condition.svg|بندانگشتی|(شکل 1۱)وضعیت رقابتی در یک مدار منطقی]]
یک '''وضعیت رقابتی''' <ref name="test">[//[:en.wikipedia.org/wiki/Race_condition:Race condition|http://en.wikipedia.org/wiki/Race_conditionRace condition]]،,</ref> به انگلیسی Race Condition یا Race Hazard یک نقص در [[سیستم]] الکترونیکی یا رایانه ای است که به موجب آن نتیجه خروجی And یا Or به طور غیر منتظرهغیرمنتظره ای به زمانبندی و ترتیب رویدادهای دیگر بستگی دارد. این اصطلاح در اصل به حالتی گفته می شودمی‌شود که دو [[سیگنال]] با هم رقابت می‌کنند تا هر یک زودتر به خروجی تاثیرتأثیر بگذارند.
 
== [[الکترونیک]] ==
به عنوان مثال، یک [[دروازه]] And با دو ورودی که در یک ورودی با سیگنال A و در ورودی دیگر با سیگنال Á تغذیه میمی‌شود. شود.در این تئوری خروجی هیچ وقت نباید یک شود. هر چند که، اگر تغییر در مقدار A از مقدار انتشار به ورودی دوم بیشتر طول بکشد، هنگامی که مقدار A از صفر به یک تغییر پیدا کند، در یک زمان کوتاه، هر دو ورودی در حالت یک قرار می گیردمی‌گیرد و همچنین خروجی دروازه نیز مقدار یک می شودمی‌شود.
 
== [[رایانه]] ==
وضعیت رقابتی در [[نرم‌افزار]] هنگامی ناشی می شودمی‌شود که [[پردازش]] های‌های مختلفی به یک وضع مشترک بستگی داشته باشد. به عنوان مثال بگذارید دو رشته T۱ و T۲ را فرض کنیم. هر کدام مقدار سراسری i را می خواهندمی‌خواهند یک واحد اضافه کنند. به طور ایده‌آل، مجموعه دستورهای زیر باید انجام شود:
# integer i=0۰ (حافظه)
# T۱ مقدار i را از حافظه خوانده و به Register۱ انتقال می دهدمی‌دهد.
# T۱ مقدار i را که در Register۱ است، یک واحد اضافه می کندمی‌کند. Register1=1۱
# T۱ مقدار Register۱ را در حافظه ذخیره می کندمی‌کند. i=1۱
# T۲ مقدار i را از حافظه خوانده و به Register۲ انتقال می دهدمی‌دهد.
# T۲ مقدار i را که در Register۲ است، یک واحد اضافه می کندمی‌کند. Register2=2۲
# T۲ مقدار Register۲ را در حافظه ذخیره می کندمی‌کند. i=2۲
# i=2۲
در حالت بالا همان طورهمان‌طور که انتظار می رفتمی‌رفت مقدار i مساوی ۲ است، با اینکه، اگر دو رشته به طور همزمان و بدون فقل کردن داده و [[همگام سازی]] اجرا شوند، خروجی دستور باید اشتباه شود که مجموعه دستورهای دیگر زیر این سناریو را نشان می دهدمی‌دهد:
# integer i=0۰ (حافظه)
# T۱ مقدار i را از حافظه خوانده و به Register۱ انتقال می دهدمی‌دهد.
# T۲ مقدار i را از حافظه خوانده و به Register۲ انتقال می دهدمی‌دهد.
# T۱ مقدار i را که در Register۱ است، یک واحد اضافه می کندمی‌کند. Register1=1۱
# T۲ مقدار i را که در Register۲ است، یک واحد اضافه می کندمی‌کند. Register2=1۱
# T۱ مقدار Register۱ را در حافظه ذخیره می کندمی‌کند. i=1۱
# T۲ مقدار Register۲ را در حافظه ذخیره می کندمی‌کند. i=1۱
# i=1۱
 
مقدار نهایی i مساوی یک شده است به جای اینکه انتظار می رفتمی‌رفت مساوی ۲ شود.
 
== منابع ==