Higher level primitives
The synchronization primitives used by higher-level code to ensure mutual
exclusion should have all of the properties described above in relation
to the low-level primitives, but in addition they
- should not tie up the processor by busywaiting (instead should block processor)
- should not keep interrupts disabled in the critical section.
Another requirement of higher-level primitives is that in addition to providing mutual exclusion, they
- provide some means to wait on arbitrary other events.
Some mechanisms assume shared memory:
- Signals - primitive interrupt-style events.
- Semaphores - where would we be without them?
- Monitors - described in the book (and used in Java).
Others are usable without shared memory:
- Message-passing - SEND and RECEIVE.
- Pipes - ancient Scottish instrument.
- Remote procedure calls - not covered in this class.
last updated 13 February 1998