14.1 Opgave om logging af transaktioner i en bank med filialer
I forlængelse af ovenstående eksempel, hvor to filialer i en bank opererer samtidigt på fælles konti, bedes I indføre
en BankLogging klasse, som skal holde styr på følgende:
Vi kan bl.a. bruge denne log til at finde ud af i hvilken rækkefølge operationerne udføres fra de to samtidigt udførende filialer i eksemplet ovenfor. Hvad angår tidsbehandling henvises til metoden getTime mv. i klassen java.util.Calendar. |
14.2 Opgave om synkroniserede skjalde
I forlængelse af ovenstående eksempel kan man observere, at hvis den ene sang synges (f.eks.) 2 gange, og den anden
sang 4 gange kører det samlede Java program aldrig til ende.
|
Solution
Vi skal sikre os, at dirigenten ikke anviser en sanger, som allerede er færdig med at synge. Vi angriber
problemet i metoden tagScenen i klassen Dirigent. Vi indfører et boolsk array, færdig, som holder rede på
når en sanger er færdig med alle vers. Denne variabel manipuleres gennem metoden af samme navn. Som man nok husker, er udsagnet scenenLedig && hvemØnskerAtSynge == næsteSangercentralt for synkroniseringen mellem sangerne. Udtrykket fortæller under hvilke omstændigheder en bestemt sanger kan få scenen. Vi ændrer nu udsaget til følgende: scenenLedig && (hvemØnskerAtSynge == næsteSanger || færdig[enAndenEnd(hvemØnskerAtSynge)])Med jævne ord, kan en sanger X gå på scenen hvis scenen er ledig OG (hvis der X's tur ELLER hvis den anden sanger er færdig). Vi bekymrer os her kun med situationen, hvor der er to sangere. Her følger min løsning:
Her er endvidere et link til det rene Java program . |
Generated: Monday March 31, 2008, 12:09:56
on the system cs-unix