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

جز
ربات: تصحیح جایگذاری کاما، شمارگان هزارگان
جز (ربات: تصحیح جایگذاری کاما، شمارگان هزارگان)
[[پرونده:Race_condition.svg|thumb|(شکل 1)وضعیت رقابتی در یک مدار منطقی]]
یک '''وضعیت رقابتی''' <ref name="test">[http://en.wikipedia.org/wiki/Race_condition http://en.wikipedia.org/wiki/Race_condition]، </ref> به انگلیسی Race Condition یا Race Hazard یک نقص در [[سیستم]] الکترونیکی یا رایانه ای است که به موجب آن نتیجه خروجی And یا Or به طور غیر منتظره ای به زمانبندی و ترتیب رویدادهای دیگر بستگی دارد.این اصطلاح در اصل به حالتی گفته می شود که دو [[سیگنال]] با هم مسابقه می دهند تا هر یک زودتر به خروجی تاثیر بگذارند.
 
==[[الکترونیک]]==
به عنوان مثال , یک [[دروازه]] And با دو ورودی که در یک ورودی با سیگنال A و در ورودی دیگر با سیگنال Á تغذیه می شود.در این تئوری خروجی هیچ وقت نباید یک شود.هر چند که , اگر تغییر در مقدار A از مقدار انتشار به ورودی دوم بیشتر طول بکشد , هنگامی که مقدار A از صفر به یک تغییر پیدا کند , در یک زمان کوتاه , هر دو ورودی در حالت یک قرار می گیرد و همچنین خروجی دروازه نیز مقدار یک می شود.
 
==[[رایانه]]==
وضعیت رقابتی در [[نرم افزار]] هنگامی ناشی می شود که [[پردازش]] های مختلفی به یک وضع مشترک بستگی داشته باشد. به عنوان مثال بگذارید دو رشته T1 و T2 را فرض کنیم.هر کدام مقدار سراسری i را می خواهند یک واحد اضافه کنند. به طور ایده آل , مجموعه دستورهای زیر باید انجام شود:
 
# integer i=0 (حافظه)
# T1 مقدار i را از حافظه خوانده و به Register1 انتقال می دهد.
# T1 مقدار i را که در Register1 است , یک واحد اضافه می کند. Register1=1
# T1 مقدار Register1 را در حافظه ذخیره می کند. i=1
# T2 مقدار i را از حافظه خوانده و به Register2 انتقال می دهد.
# T2 مقدار i را که در Register2 است , یک واحد اضافه می کند. Register2=2
# T2 مقدار Register2 را در حافظه ذخیره می کند. i=2
# i=2
در حالت بالا همان طور که انتظار می رفت مقدار i مساوی 2 است , با اینکه , اگر دو رشته به طور همزمان و بدون فقل کردن داده و [[همگام سازی]] اجرا شوند , خروجی دستور باید اشتباه شود که مجموعه دستورهای دیگر زیر این سناریو را نشان می دهد:
 
# integer i=0 (حافظه)
# T1 مقدار i را از حافظه خوانده و به Register1 انتقال می دهد.
# T2 مقدار i را از حافظه خوانده و به Register2 انتقال می دهد.
# T1 مقدار i را که در Register1 است , یک واحد اضافه می کند. Register1=1
# T2 مقدار i را که در Register2 است , یک واحد اضافه می کند. Register2=1
# T1 مقدار Register1 را در حافظه ذخیره می کند. i=1
# T2 مقدار Register2 را در حافظه ذخیره می کند. i=1
۵۹۲٬۸۸۴

ویرایش