| program AlarmClockProgram { | |
| monitor AlarmClock { | |
| var now : integer := 0; | |
| var wakeup : condition; | |
| procedure wakeme(in n : integer) { | |
| var alarmSetting : integer; | |
| alarmSetting := now + n; | |
| while now < alarmSetting do { | |
| wakeup.wait(alarmSetting); | |
| } | |
| wakeup.signal(); | |
| -- In case the next process is due to wake up at the same time | |
| } | |
| procedure tick() { | |
| now := now + 1; | |
| wakeup.signal(); | |
| } | |
| } | |
| } | |