وضعیت رقابتی: تفاوت میان نسخهها
جز ربات رده همسنگ: افزودن> رده:ضد الگو-رده:منطق در علوم کامپیوتر |
جز ربات: مرتبسازی ردهها؛ زیباسازی |
||
خط ۳: | خط ۳: | ||
==[[الکترونیک]]== |
==[[الکترونیک]]== |
||
به عنوان |
به عنوان مثال، یک [[دروازه]] And با دو ورودی که در یک ورودی با سیگنال A و در ورودی دیگر با سیگنال Á تغذیه می شود.در این تئوری خروجی هیچ وقت نباید یک شود.هر چند که، اگر تغییر در مقدار A از مقدار انتشار به ورودی دوم بیشتر طول بکشد، هنگامی که مقدار A از صفر به یک تغییر پیدا کند، در یک زمان کوتاه، هر دو ورودی در حالت یک قرار می گیرد و همچنین خروجی دروازه نیز مقدار یک می شود. |
||
==[[رایانه]]== |
==[[رایانه]]== |
||
وضعیت رقابتی در [[نرم افزار]] هنگامی ناشی می شود که [[پردازش]] های مختلفی به یک وضع مشترک بستگی داشته باشد. به عنوان مثال بگذارید دو رشته |
وضعیت رقابتی در [[نرم افزار]] هنگامی ناشی می شود که [[پردازش]] های مختلفی به یک وضع مشترک بستگی داشته باشد. به عنوان مثال بگذارید دو رشته T۱ و T۲ را فرض کنیم.هر کدام مقدار سراسری i را می خواهند یک واحد اضافه کنند. به طور ایده آل، مجموعه دستورهای زیر باید انجام شود: |
||
# integer i=0 (حافظه) |
# 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=2 |
||
در حالت بالا همان طور که انتظار می رفت مقدار i مساوی |
در حالت بالا همان طور که انتظار می رفت مقدار i مساوی ۲ است، با اینکه، اگر دو رشته به طور همزمان و بدون فقل کردن داده و [[همگام سازی]] اجرا شوند، خروجی دستور باید اشتباه شود که مجموعه دستورهای دیگر زیر این سناریو را نشان می دهد: |
||
# integer i=0 (حافظه) |
# 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=1 |
||
مقدار نهایی i مساوی یک شده است به جای اینکه انتظار می رفت مساوی |
مقدار نهایی i مساوی یک شده است به جای اینکه انتظار می رفت مساوی ۲ شود. |
||
==منابع== |
==منابع== |
||
<references /> |
<references /> |
||
⚫ | |||
⚫ | |||
[[رده:ضد الگو]] |
[[رده:ضد الگو]] |
||
[[رده:منطق در علوم کامپیوتر]] |
[[رده:منطق در علوم کامپیوتر]] |
||
[[رده:همروندی]] |
[[رده:همروندی]] |
||
⚫ | |||
⚫ | |||
[[ar:حالة تسابق]] |
[[ar:حالة تسابق]] |
نسخهٔ ۲۹ مهٔ ۲۰۱۲، ساعت ۲۲:۵۳
یک وضعیت رقابتی [۱] به انگلیسی 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 مساوی یک شده است به جای اینکه انتظار می رفت مساوی ۲ شود.