next up previous
Next: API Up: JiST- Java in Simulation Previous: Continuations

Concurrency

Using continuations, we also can recreate various concurrency primitives in simulation time. As an example, we construct the Channel primitive from Hoare's Communicating Sequential Processes (CSP) language [9]. Other primitives, such as threads, locks, semaphores, barriers, monitors, FIFOs, etc., can readily be built either atop Channels, or directly within the kernel.

Figure 14: A blocking CSP Channel is built using continuations. Other simulation synchronization primitives can similarly be constructed.
\begin{figure}\resizebox{\columnwidth}{!}{\begin{picture}(0,0)%
\includegraphics{figs/channel}%
\par
\end{picture}\input{figs/channel.texi}}
\end{figure}

As shown in Figure 14, the CSP channel blocks on the first receive (or send) call and stores the continuation. When the matching send (or receive) arrives, then the data item is transferred and control returns to both callers. A JiST channel is created via the createChannel system call. It supports both the CSP semantics, as well as non-blocking sends and receives.



2006-01-18