وضعیت رقابتی
یک وضعیت رقابتی[۱] (به انگلیسی: Race Condition) یا Race Hazard یک نقص در سیستم الکترونیکی یا رایانهای است که به موجب آن نتیجهٔ خروجی And یا Or بهطور غیرمنتظرهای به زمانبندی و ترتیب رویدادهای دیگر بستگی دارد. این اصطلاح در اصل به حالتی گفته میشود که دو سیگنال با هم رقابت میکنند تا هر یک زودتر به خروجی تأثیر بگذارند.
الکترونیک
[ویرایش]به عنوان مثال، یک دروازه And با دو ورودی که در یک ورودی با سیگنال A و در ورودی دیگر با سیگنال Á تغذیه میشود. در این تئوری خروجی هیچ وقت نباید یک شود. هر چند که، اگر تغییر در مقدار A از مقدار انتشار به ورودی دوم بیشتر طول بکشد، هنگامی که مقدار A از صفر به یک تغییر پیدا کند، در یک زمان کوتاه، هر دو ورودی در حالت یک قرار میگیرد و همچنین خروجی دروازه نیز مقدار یک میشود.
رایانه
[ویرایش]وضعیت رقابتی در نرمافزار هنگامی ناشی میشود که پردازشهای مختلفی به یک وضع مشترک بستگی داشته باشد. به عنوان مثال بگذارید دو رشته T۱ و T۲ را فرض کنیم. هر کدام مقدار سراسری i را میخواهند یک واحد اضافه کنند. بهطور ایدهآل، مجموعه دستورهای زیر باید انجام شود:
- integer i=۰ (حافظه)
- T۱ مقدار i را از حافظه خوانده و به Register۱ انتقال میدهد.
- T۱ مقدار i را که در Register۱ است، یک واحد اضافه میکند. Register1=۱
- T۱ مقدار Register۱ را در حافظه ذخیره میکند. i=۱
- T۲ مقدار i را از حافظه خوانده و به Register۲ انتقال میدهد.
- T۲ مقدار i را که در Register۲ است، یک واحد اضافه میکند. Register2=۲
- T۲ مقدار Register۲ را در حافظه ذخیره میکند. i=۲
- i=۲
در حالت بالا همانطور که انتظار میرفت مقدار i مساوی ۲ است، با اینکه، اگر دو رشته بهطور همزمان و بدون قفل کردن داده و همگامسازی اجرا شوند، خروجی دستور باید اشتباه شود که مجموعه دستورهای دیگر زیر این سناریو را نشان میدهد:
- integer i=۰ (حافظه)
- T۱ مقدار i را از حافظه خوانده و به Register۱ انتقال میدهد.
- T۲ مقدار i را از حافظه خوانده و به Register۲ انتقال میدهد.
- T۱ مقدار i را که در Register۱ است، یک واحد اضافه میکند. Register1=۱
- T۲ مقدار i را که در Register۲ است، یک واحد اضافه میکند. Register2=۱
- T۱ مقدار Register۱ را در حافظه ذخیره میکند. i=۱
- T۲ مقدار Register۲ را در حافظه ذخیره میکند. i=۱
- i=۱
مقدار نهایی i مساوی یک شدهاست به جای اینکه انتظار میرفت مساوی ۲ شود.
منابع
[ویرایش]- ↑ "Race condition". Wikipedia (به انگلیسی). 2024-01-22.