;;; -*- Mode:LISP; Package:USER; Base:10 -*- ;; what we want is some construct that ;; makes code be reentrent without going to a lot ;; of hair. e.g. INTERN and buddies. ;; Other functions like MAP-ATOMS could also do it. (defvar *pkg* nil) (defvar *k* 0) (defvar done-1 nil) (defvar done-2 nil) (defun map-atoms-test (n q) (setq *pkg* (make-package (string (gensym)) :use nil :size 10)) (setq *k* 0) (setq done-1 nil) (setq done-2 nil) (let ((kr (read-meter 'si:%tv-clock-rate))) (unwind-protect (progn (write-meter 'si:%tv-clock-rate q) (process-run-function `(:name "test a" :quantum ,q) #'(lambda (n) (dotimes (j n) (intern (format nil "Z-~D" *k*) *pkg*)) (setq done-1 t)) n) (process-run-function `(:name "test b" :quantum ,q) #'(lambda (stream) (mapatoms #'(lambda (sym) (print sym stream)) *pkg*) (setq done-2 t)) terminal-io) (process-wait "hack" #'(lambda () (and done-1 done-2)))) (write-meter 'si:%tv-clock-rate kr))))