| program IOStreamProgram { | |
| monitor IOStream { | |
| var buffer : portion; | |
| var count : integer := 0; | |
| var nonEmpty : condition; | |
| var nonFull : condition; | |
| procedure append(in x : portion) { | |
| if count = 1 then { | |
| nonFull.wait(); | |
| } | |
| buffer := x; | |
| count := 1; | |
| nonEmpty.signal(); | |
| } | |
| procedure remove(out x : portion) { | |
| if count = 0 then { | |
| nonEmpty.wait(); | |
| } | |
| x := buffer; | |
| count := 0; | |
| nonFull.signal(); | |
| } | |
| } | |
| } | |