mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-18 23:32:17 -08:00
Test that when we have N+M processes and we increase the semaphore count by N, only N awake.
This commit is contained in:
parent
65c5ac1410
commit
324f2c59cc
1 changed files with 26 additions and 0 deletions
|
|
@ -66,6 +66,32 @@
|
|||
(= (mp:semaphore-count sem) 0))))
|
||||
t)
|
||||
|
||||
;;; Date: 14/04/2012
|
||||
;;; When we signal N processes and N+M are waiting, only N awake
|
||||
(def-mp-test sem-signal-only-n-processes
|
||||
(loop for m from 1 upto 3 always
|
||||
(loop for n from 1 upto 4 always
|
||||
(let* ((counter 0)
|
||||
(lock (mp:make-lock :name "sem-signal-n-processes"))
|
||||
(sem (mp:make-semaphore :name "sem-signal-n-processs"))
|
||||
(all-process
|
||||
(loop for i from 1 upto (+ n m)
|
||||
collect (mp:process-run-function
|
||||
"sem-signal-n-processes"
|
||||
#'(lambda ()
|
||||
(mp:wait-on-semaphore sem)
|
||||
(mp:with-lock (lock) (incf counter)))))))
|
||||
(and (zerop counter)
|
||||
(every #'mp:process-active-p all-process)
|
||||
(= (mp:semaphore-wait-count sem) (+ m n))
|
||||
(progn (mp:signal-semaphore sem n) (sleep 0.2)
|
||||
(= counter n))
|
||||
(= (mp:semaphore-wait-count sem) m)
|
||||
(progn (mp:signal-semaphore sem m) (sleep 0.2)
|
||||
(= counter (+ n m)))
|
||||
))))
|
||||
t)
|
||||
|
||||
;;; Date: 14/04/2012
|
||||
;;; It is possible to kill processes waiting for a semaphore.
|
||||
;;;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue