Point to Point Event Synchronization
Software methods:
- Interrupts
- Busy-waiting: use ordinary variables as flags
- Blocking: use semaphores
Full hardware support: full-empty bit with each word in memory
- Set when word is “full” with newly produced data (i.e. when written)
- Unset when word is “empty” due to being consumed (i.e. when read)
- Natural for word-level producer-consumer synchronization
- producer: write if empty, set to full; consumer: read if full; set to empty
- Hardware preserves atomicity of bit manipulation with read or write
- Problem: flexiblity
- multiple consumers, or multiple writes before consumer reads?
- needs language support to specify when to use
- composite data structures?