NextPrevUpTopContentsIndex

16.6 Example

The following is an informal example of multi-processing with a single process (other then the idle process), namely a top-loop. Once it has started up, try (mp:ps) .

(in-package "CL-USER")
 
;;; (guarantee-processes) will start up 
;;; multiprocessing with a top-level loop
;;; in this example,
;;; use *base-process* to ensure that base 
;;; process will only be pushed
;;; onto *initial-processes* once, no matter how
;;; many times guarantee-processes is called
 
(defvar *base-process* 
  '("base-process" nil base-process-function))
 
;;; the base process consists of a top-level 
;;; loops with restarts which allow control of
;;; return in the event of an error -- to see
;;; these in action, evaluate (guarantee-processes)
;;; and then an unbound variable.
 
;;; Note that starting and stopping multiprocessing is not
;;; relevant if Common LispWorks is already running. This example
;;; is included for illustration only.
 
(defun base-process-function ()
  (with-simple-restart
   (abort "Return from multiprocessing")
   (loop
    (with-simple-restart
     (abort "Return to top-level-loop")
     (system:%top-level))))
  (mp::stop-multiprocessing))
 
;;; simple startup of multiprocessing with one 
;;; process (apart from the idle process)
 
(defun guarantee-processes ()
   (unless mp:*multiprocessing* 
   (pushnew *base-process*
     mp:*initial-processes*)
   (mp:initialize-multiprocessing)))

LispWorks User Guide - 11 Mar 2008

NextPrevUpTopContentsIndex