/ / Infinite Loop: Wyznaczanie i dzielenie się pętli Infinite - algorytm, pętle, pętla nieskończona, nieskończona

Infinite Loop: Wyznaczanie i dzielenie się pętli Infinite - algorytm, pętle, pętla nieskończona, nieskończona

Jak byś określił, że pętla jest nieskończoną pętlą i wyrwie się z niej.

Czy ktoś ma algorytm lub może mi pomóc w tej sprawie.

Dzięki

Odpowiedzi:

7 dla odpowiedzi № 1

Nie ma ogólnego algorytmu przypadku, który mógłby określić, czy program znajduje się w nieskończonej pętli, czy nie dla każdego ukończenie język, to jest w zasadzie Problem zatrzymania.

Pomysł udowodnienia tego jest prosty:

  1. Załóżmy, że masz taki algorytm A.
  2. Zbuduj program B który się powołuje A na siebie [na B].
  3. gdyby A odpowiada „program się zatrzyma” - wykonaj nieskończoną pętlę
  4. inaczej [A odpowiedzi B nie zatrzymuje się - natychmiast zatrzymaj

Załóżmy teraz, że przywołujesz A na B - odpowiedź będzie zdecydowanie błędna A nie istnieje.

Uwaga: powyższe NIE jest formalnym dowodem, tylko jego szkicem.


4 dla odpowiedzi nr 2

Jak napisali inni, nie można tego ustalić.

Jeśli jednak chcesz mieć jakieś sprawdzenie, tymoże użyć wzoru projektu WatchDog. Jest to osobny wątek, który sprawdza, czy zadanie jest nadal aktywne. Twój własny wątek powinien dawać sygnał regularnie, aby powiedzieć, że żyje. Upewnij się, że ten sygnał nie jest ustawiony w twojej (nieskończonej) pętli.

Jeśli nie było sygnału, program znajduje się w nieskończonej pętli lub został zatrzymany i watchdog może na niego działać.