حلقه بی‌نهایت، حلقه بی‌پایان، یا حلقه بی‌فایده، دنباله‌ای از دستورالعمل‌ها در یک برنامه رایانه‌ای است که به شکل نامحدودی تکرار می‌شوند. یا به این دلیل که شرطی برای پایان یافتن حلقه تعیین نشده، یا اگر تعیین شده، طوری است که آن شرایط هیچگاه اتفاق نمی‌افتد یا اینکه شرط پایان، حلقه را مجدداً از ابتدا اجرا می‌کند. در سیستم‌عامل‌های قدیمی که از چندوظیفه‌ای تعاونی استفاده می‌کردند، حلقه‌های بی‌پایان معمولاً باعث می‌شدند تا کل سیستم‌عامل غیرپاسخگو شود. در مدل‌های چند وظیفه‌ای فعلی که به شکل غیر انحصاری است، حلقه‌های بی‌نهایت باعث می‌شوند تا برنامه کل زمان در دسترس پردازنده را مصرف کند، اما معمولاً کاربر می‌تواند آنها را از بین ببرد و به آنها خاتمه دهد. همچنین حلقه‌های انتظار مشغول هم گاهی حلقه بی‌نهایت نامیده می‌شوند. یکی از دلایلی که می‌تواند باعث هنگ کردن سیستم شود همین حلقه‌های بی‌نهایت هستند. از دیگر دلایل هنگ کردن سیستم می‌توان به بن‌بست یا نقض دسترسی اشاره کرد.

حلقه‌زنی عمدی یا غیرعمدی

ویرایش

حلقه‌زنی به تکرار کردن مجموعه‌ای از دستورالعمل‌ها تا زمان برقراری یک شرط خاص گفته می‌شود. حلقه بی‌پایان وقتی اتفاق می‌افتد که شرط حلقه همیشه برقرار باشد. البته این مورد بستگی به نوع حلقه دارد.

حلقه‌زنی عمدی

ویرایش

موارد کمی وجود دارد که عمداً می‌خواهیم یک حلقه بی‌نهایت داشته باشیم. برای مثال، بازی‌های مبتنی بر کارتریج در کنسول‌های بازی، معمولاً هیچ شرط خاصی برای پایان دادن به حلقه اصلی خود ندارند، چرا که هیچ سیستم‌عاملی در آنجا وجود ندارد تا برنامه از آن خارج شود. حلقه به اجرای خود ادامه می‌دهد تا وقتی که دستگاه خاموش شود.

حلقه‌زنی ناخواسته

ویرایش

این اصطلاح بیشتر در مواقعی استفاده می‌شود که هدفمان چنین چیزی نباشد و حلقه بی‌نهایت بر اثر یک حفره و به صورت ناخواسته اتفاق بیفتد.

یک مثال ساده به زبان سی:

# include <stdio.h>
int main()
{
  while(1) {
    printf("Infinite Loop\n");
  }
}

مثال بالا بدون توقف پیغام Infinite Loop را چاپ می‌کند. شرط پایان عدد ۱ است و بنابراین مقدار این شرط همیشه درست بوده و حلقه تا ابد اجرا می‌شود. مثال زیر یک حلقه بی‌نهایت را به زبان بیسیک نشان می‌دهد:

DO
LOOP UNTIL 0

یک حلقه مشابه به زبان اسمبلی:

loop:
  ; Code to loop here
  jmp loop

منابع

ویرایش

مشارکت‌کنندگان ویکی‌پدیا. «Infinite loop». در دانشنامهٔ ویکی‌پدیای انگلیسی، بازبینی‌شده در ۱۰ اوت ۲۰۱۳.