next up previous
Next: Interfaces and Invocation Up: Intra-domain scheduling Previous: Event counts and sequencers

Concurrency primitives using events


In contrast to many other systems where implementing one style of concurrency primitives over another set can be expensive it is very efficient to implement many schemes over event counts.

The mutexes and conditional variables of SRC threads [21], POSIX threads, and the semaphores used in the Wanda system have all been implemented straightforwardly and efficiently over event counts. Details can be found in [20].

Implementing threads packages over the upcall interface has proved remarkably easy. A Nemesis module implementing both preemptive and non-preemptive threads packages, providing both an interface to the event mechanism and synchronisation based on event counts and sequencers comes to about 2000 lines of heavily commented C and about 20 assembler opcodes. For comparison, the POSIX threads library for OSF/1 achieves essentially the same functionality over OSF/1 kernel threads with over 6000 lines of code, with considerably inferior performance.

I. Leslie, D. McAuley, R. Black, T. Roscoe, P. Barham, D. Evers, R. Fairbairns & E. Hyden