Enkelt räknar man ut att det tar ca 2 minuter för ett tåg att passera tunneln, och att en signalist på den tiden hinner skicka ca 50 tecken.
Många resonerar nu så att signalisterna har gott om tid att fråga varandra hur många tåg som åkt ut eller varna för att ett extra tåg gått in i tunneln. Det är naturligtvis fortfarande mycket viktigt att ha ett vettigt protokoll för dessa meddelanden, speciellt i detta fall, eftersom man inte hinner skicka mer än två-tre stycken enligt förslag som "Varning: ett tåg till har åkt in! Hur många har åkt ut?". Vad ska mottagaren göra om detta meddelande börjar komma in samtidigt som det första tåget åker ut? Och vad ska sändaren göra om ytterligare ett tåg kommer förbi medan han sänder detta?
Här föreslår några att problemet enkelt löses genom att man låter semaforen normalt stå på rött, och att tågen måste be om lov att komma in i tunneln. Frågan är ju hur protokollet mellan signalisterna ska se ut för att olyckor helt ska kunna undvikas.
En intressant och riktigt iakttagelse är att det inte är så viktigt att ha en semafor om man ändå har flaggor: detta kan ses som att man väntar sig det oväntade (i detta fall att semaforen är trasig), och att semaforen kan ses som en optimering av en manuell signalering.
En intressant men mindre bra lösning är att låta meddelandet "train in tunnel" användas både för att signalera att ett tåg är på väg in i tunneln, och för att svara på frågan "is tunnel empty". Med lämpliga antaganden om hur signalisterna beter sig fungerar det förmodligen i detta fall, men generellt kan sådana lösningar ge upphov till s.k. race conditions som kan göra att meddelandet blir tvetydigt.
Viktiga ledtrådar i frågan är
Denna uppgift visar sig mycket svår att lösa generellt, utan att göra vissa antaganden om verkligheten. Det främsta problemet är naturligtvis att det kan komma ett tåg från vardera hållet precis samtidigt: bägge signalisterna antar att tunneln är tom och släpper förbi tåget, efter att ha talat om för andra änden att ett tåg är på väg. Om även dessa meddelanden skickas samtidigt, och detta inte upptäcks, har man problem. Man måste alltså anta att protokollet upptäcker kollisioner (gärna på ett lägre skikt).
Ett annat problem är huruvida signalisterna tar emot alla meddelanden, eller om de kan tappas bort (t.ex. när signalisten letar efter en flagga eller uträttar naturbehov). Det blir onekligen enklare att lösa uppgiften om inga meddelanden tappas bort, men är det ett rimligt antagande?
Med verktyget SPIN, som utveckats av Gerard Holzmann och som beskrivs i senare kapitel av hans bok, kan man beskriva protokollet i ett slags programmeringsspråk ("Promela") och
Den som är intresserad kan titta på min beskrivning i Promela av ett protokoll för detta exempel här, och exempel på tillståndsdiagram och tidssekvensdiagram.
| © Björn Victor Senast ändrad: Tue, 10-Sep-2002 11:37 MEST |
|