پرش به محتوا

وضعیت رقابتی

از ویکی‌پدیا، دانشنامهٔ آزاد
(شکل ۱) وضعیت رقابتی در یک مدار منطقی

یک وضعیت رقابتی[۱] (به انگلیسی: Race Condition) یا Race Hazard یک نقص در سیستم الکترونیکی یا رایانه‌ای است که به موجب آن نتیجهٔ خروجی And یا Or به‌طور غیرمنتظره‌ای به زمانبندی و ترتیب رویدادهای دیگر بستگی دارد. این اصطلاح در اصل به حالتی گفته می‌شود که دو سیگنال با هم رقابت می‌کنند تا هر یک زودتر به خروجی تأثیر بگذارند.

الکترونیک

[ویرایش]

به عنوان مثال، یک دروازه And با دو ورودی که در یک ورودی با سیگنال A و در ورودی دیگر با سیگنال Á تغذیه می‌شود. در این تئوری خروجی هیچ وقت نباید یک شود. هر چند که، اگر تغییر در مقدار A از مقدار انتشار به ورودی دوم بیشتر طول بکشد، هنگامی که مقدار A از صفر به یک تغییر پیدا کند، در یک زمان کوتاه، هر دو ورودی در حالت یک قرار می‌گیرد و همچنین خروجی دروازه نیز مقدار یک می‌شود.

رایانه

[ویرایش]

وضعیت رقابتی در نرم‌افزار هنگامی ناشی می‌شود که پردازش‌های مختلفی به یک وضع مشترک بستگی داشته باشد. به عنوان مثال بگذارید دو رشته T۱ و T۲ را فرض کنیم. هر کدام مقدار سراسری i را می‌خواهند یک واحد اضافه کنند. به‌طور ایده‌آل، مجموعه دستورهای زیر باید انجام شود:

  1. integer i=۰ (حافظه)
  2. T۱ مقدار i را از حافظه خوانده و به Register۱ انتقال می‌دهد.
  3. T۱ مقدار i را که در Register۱ است، یک واحد اضافه می‌کند. Register1=۱
  4. T۱ مقدار Register۱ را در حافظه ذخیره می‌کند. i=۱
  5. T۲ مقدار i را از حافظه خوانده و به Register۲ انتقال می‌دهد.
  6. T۲ مقدار i را که در Register۲ است، یک واحد اضافه می‌کند. Register2=۲
  7. T۲ مقدار Register۲ را در حافظه ذخیره می‌کند. i=۲
  8. i=۲

در حالت بالا همان‌طور که انتظار می‌رفت مقدار i مساوی ۲ است، با این‌که، اگر دو رشته به‌طور هم‌زمان و بدون قفل کردن داده و همگام‌سازی اجرا شوند، خروجی دستور باید اشتباه شود که مجموعه دستورهای دیگر زیر این سناریو را نشان می‌دهد:

  1. integer i=۰ (حافظه)
  2. T۱ مقدار i را از حافظه خوانده و به Register۱ انتقال می‌دهد.
  3. T۲ مقدار i را از حافظه خوانده و به Register۲ انتقال می‌دهد.
  4. T۱ مقدار i را که در Register۱ است، یک واحد اضافه می‌کند. Register1=۱
  5. T۲ مقدار i را که در Register۲ است، یک واحد اضافه می‌کند. Register2=۱
  6. T۱ مقدار Register۱ را در حافظه ذخیره می‌کند. i=۱
  7. T۲ مقدار Register۲ را در حافظه ذخیره می‌کند. i=۱
  8. i=۱

مقدار نهایی i مساوی یک شده‌است به جای این‌که انتظار می‌رفت مساوی ۲ شود.

منابع

[ویرایش]
  1. "Race condition". Wikipedia (به انگلیسی). 2024-01-22.