scsh-checkins
[Top] [All Lists]

[Scsh-checkins] CVS: scsh-0.6/doc/scsh-manual threads.tex,1.1,1.2

To: scsh-checkins@lists.sourceforge.net
Subject: [Scsh-checkins] CVS: scsh-0.6/doc/scsh-manual threads.tex,1.1,1.2
From: Martin Gasbichler <mainzelm@users.sourceforge.net>
Date: Tue Nov 13 13:05:02 2001
List-id: <scsh-checkins.lists.sourceforge.net>
Sender: scsh-checkins-admin@lists.sourceforge.net
Update of /cvsroot/scsh/scsh-0.6/doc/scsh-manual
In directory usw-pr-cvs1:/tmp/cvs-serv27735

Modified Files:
        threads.tex 
Log Message:
Some additions.


Index: threads.tex
===================================================================
RCS file: /cvsroot/scsh/scsh-0.6/doc/scsh-manual/threads.tex,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** threads.tex 2001/07/13 07:12:36     1.1
--- threads.tex 2001/11/13 21:04:15     1.2
***************
*** 24,28 ****
  documentation is an extension of the file \texttt{doc/threads.txt}.
  
! The thread package is named \texttt{threads}, it has to be opened explicitly.
  
  \defun {spawn} {thunk [name]} \undefined 
--- 24,28 ----
  documentation is an extension of the file \texttt{doc/threads.txt}.
  
! The thread structure is named \texttt{threads}, it has to be opened 
explicitly.
  
  \defun {spawn} {thunk [name]} \undefined 
***************
*** 73,77 ****
  commonly known as \textit{semaphores}. Threads can obtain and release
  locks. If a thread tries to obtain a lock which is held by another
! thread, the first thread is blocked.
  
  \defun{make-lock} {} {lock}
--- 73,78 ----
  commonly known as \textit{semaphores}. Threads can obtain and release
  locks. If a thread tries to obtain a lock which is held by another
! thread, the first thread is blocked. To access the following
! procedures, you must open the structure \texttt{locks}.
  
  \defun{make-lock} {} {lock}
***************
*** 86,90 ****
  
  Obtain \var{lock}. Causes the thread to block if the lock is held by
! another thread.
  
  \defun{maybe-obtain-lock} {lock} {\boolean}
--- 87,91 ----
  
  Obtain \var{lock}. Causes the thread to block if the lock is held by
! a thread.
  
  \defun{maybe-obtain-lock} {lock} {\boolean}
***************
*** 111,115 ****
  sets the value of the placeholder. Now all reading threads receive the
  value and continue executing. Setting a placeholder to two different
! values causes an error.
  
  \defun {make-placeholder} {} {placeholder}
--- 112,117 ----
  sets the value of the placeholder. Now all reading threads receive the
  value and continue executing. Setting a placeholder to two different
! values causes an error. The structure \texttt{placeholders} features
! the following procedures:
  
  \defun {make-placeholder} {} {placeholder}
***************
*** 132,136 ****
--- 134,191 ----
  means of \ex{placeholder-set!}.
  
+ \section{The event interface to interrupts}
+ \label{sec:event-interf-interr}
+ Scsh provides an synchronous interface to the asynchronous signals
+ delivered by the operation system\footnote{Olin's paper ``Automatic
+   management of operation-system resources'' describes this system in
+   detail.}.  The key element in this system is an object called
+ \textit{sigevent}, which corresponds to a single occurence of a
+ signal. A sigevent has two fields: the Unix signal that occurred and a
+ pointer to the next event that occurred. That is, events are kept in a
+ linked list in increasing-time order. Scsh provides various procedures
+ to access this list, they are all procided by the structure
+ \texttt{sigevents}.
  
+ \defun {most-recent-sigevent} {} {sigevent}
+ 
+ Returns the most recent sigevent, that is, the head of the sigevent
+ list.
+ 
+ \defun {sigevent?} {object} {\boolean}
+ 
+ The predicate for sigevents.
+ 
+ \defun {next-sigevent} {pre-event type} {event} 
+ 
+ Returns the next sigevent of type \texttt{type} after sigevent
+ \texttt{pre-event}. If no such event exists, the procdure blocks.
+ 
+ \defun {next-sigevent-set} {pre-event set} {event}
+ 
+ Returns the next sigevent whose type is in \texttt{set} after
+ \texttt{pre-event}. If no such event exists, the procdure blocks. 
+ 
+ \defun {next-sigevent/no-wait} {pre-event type} {event or \sharpf}
+ 
+ Same as \texttt{next-sigevent}, but returns \sharpf if no appropriate
+ event exists.
+ 
+ \defun {next-sigevent-set/no-wait} {set pre-event} {event or \sharpf}
+ 
+ Same as \texttt{next-sigevent-set}, but returns \sharpf if no appropriate
+ event exists.
+ 
+ As a small example, consider this piece of code that toggles the
+ variable \texttt{state} by USR1 and USR2:
+ \begin{code}
+ (define state #t)
+ 
+ (let lp ((sigevent (most-recent-sigevent)))
+   (let ((next (next-sigevent sigevent interrupt/usr1)))
+     (set! state #f)
+     (let ((next (next-sigevent next interrupt/usr2)))
+       (set! state #t)
+       (lp next))))
+ \end{code}
  \section{Interaction between threads and process state}
  \label{sec:ps_interac}
***************
*** 138,143 ****
  Global process state is a bad thing: it undermines modularity. In the
  case of concurrency however things get even worse.  The simplest
! example for this it the current working directory. If this is global
! state, no thread can ever reliably dereference a relative link.
  
  Scsh addresses the problem of process state in a uniform way for
--- 193,198 ----
  Global process state is a bad thing: it undermines modularity. In the
  case of concurrency however things get even worse.  The simplest
! example for this it the current working directory. If this would be
! global state, no thread can ever reliably dereference a relative link.
  
  Scsh addresses the problem of process state in a uniform way for



<Prev in Thread] Current Thread [Next in Thread>
  • [Scsh-checkins] CVS: scsh-0.6/doc/scsh-manual threads.tex,1.1,1.2, Martin Gasbichler <=