Feladat: S.147 Korcsoport: 18- Nehézségi fok: nehéz
Kitűző(k):  Darabos Dániel ,  Erben Péter 
Füzet: 2020/november, 488 - 489. oldal  PDF  |  MathML 
Témakör(ök): Számítástechnika, informatika, Nehezebb feladat, Számítástudomány

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Ha egy számítógépes rendszerben egyszerre több program fut, akkor zárakat használnak a megosztott erőforrások biztonságos kezelése érdekében. Mielőtt egy program pl. közös memóriaterületet használna, megvizsgálja, hogy a hozzá tartozó zár nyitva van-e. Ha igen, akkor zárja azt, használja az erőforrást, majd ha már nincs rá szüksége, akkor a zárat kinyitja. Amíg a program használja az erőforrást és az ahhoz tartozó zár be van zárva, addig más program nem tudja az erőforrást használni, így várakoznia kell, amíg az erőforrás szabaddá nem válik és a zár újra nyitva nem lesz.
Van két programunk, melyek önmagukban determinisztikusak, azaz véges időn belül lefutnak és pontosan tudjuk, hogy az egyes utasításaikat milyen sorrendben hajtják végre. Mindkét program esetében ismerjük, hogy mely erőforrásokat és milyen sorrendben próbálják lefoglalni és elengedni, tehát azok zárjait milyen sorrendben nyitják és zárják.
Döntsük el, hogy kialakulhat-e holtpont, ha csak ez a két program fut a rendszerben. Holtpontnak nevezzük azt az állapotot, amikor a rendszerben futó összes program olyan erőforrásra vár, amelyet egy másik program már használ, ezért egyik program sem tud tovább futni. Készítsünk programot, amely T programpár esetében meghatározza, hogy kialakulhat-e holtpont.
Bemenet: az első sor tartalmazza a programpárok T számát. Minden programpárt három sor ír le. Az első sor tartalmazza az N és M számokat, melyek az első és a második program zár műveleteinek számát adja meg. A következő két sor az első és a második program erőforrás műveleteit írja le a programfutás szerinti sorrendben. Egy x>0 szám azt jelenti, hogy a program a következő lépésében az x-edik erőforrást használná, míg egy x<0 szám azt, hogy az x-edik erőforrást a program már nem használja tovább. Ha a program futása végére ér, akkor elengedi az összes lefoglalt erőforrást, tehát minden általa lezárt zár kinyílik. Ez nem feltétlenül jelenik meg a bemenetben.
Kimenet: T sort kell kiírni, amelyek mindegyike az ,,Igen'' vagy a ,,Nem'' szöveg aszerint, hogy kerülhet-e holtpontba a rendszer.
Példa:

 
Bemenet  (a /  jel sortörést helyettesít)Kimenet   2Igen6 3 / 1 2 3 -3 -2 -1 / 1 3 2Nem4 5 / 1 2 -2 3 / 2 3 -2 -3 1
 

Korlátok: 1T10, 1N,M100, 1x106. Időkorlát: 0,2 mp.
Beküldendő egy s147.zip tömörített állományban a megfelelően dokumentált és kommentezett forrásprogram, amely tartalmazza a megoldás lépéseit, valamint megadja, hogy a program melyik fejlesztői környezetben futtatható.