Summary
1. Threads are a useful tool for structuring complex systems.
Separate the code to handle concurrent activities that are logically separate, with easy handling of priority.
Interaction primitives integrate synchronization, data transfer, and possibly priority inheritance.
2. Many systems include an event handling mechanism.
Useful in conjuction with threads, or may be viewed as an alternative to threads structuring concurrent systems.
Examples: Unix signals, NT APCs, GetNextEvent()
3. Event-structured systems may require less direct handling of concurrency.
But must synchronize with handlers if they are preemptive.