- changed status to resolved
Parameters' initial values
Issue #126
resolved
Parameters created in child thread are not propagated to other thread including parent thread. This is inconvenient.
The following is concrete example
(import (scheme base) (scheme load) (scheme write) (scheme eval) (srfi 18))
(define box (make-vector 1))
(define lock (make-mutex))
(define waiter (make-condition-variable))
(define t
(thread-start!
(make-thread
(lambda ()
(mutex-unlock! lock waiter)
((vector-ref box 0))))))
(define (do-param v)
(display (current-thread))
(display (eval '(*param*) (environment '(param))))
(eval `(*param* ,v) (environment '(param)))
(display (eval '(*param*) (environment '(param))))
(newline))
(thread-join! (thread-start! (make-thread
(lambda () (do-param ":changed")))))
;; main thread
(do-param ":changed-main")
;; other thread?
(thread-join! (thread-start! (make-thread
(lambda () (do-param ":changed-other")))))
(vector-set! box 0 (lambda () (do-param ":changed-before")))
(condition-variable-broadcast! waiter)
(thread-join! t)
where (param)
is:
(define-library (param)
(export *param*)
(import (scheme base))
(begin
(define *param* (make-parameter 10))))
Current result
#<thread thread-9 runnable 0x80204320>10:changed
#<thread root runnable 0x8014ce10>#f:changed-main
#<thread thread-10 runnable 0x80204190>:changed-main:changed-other
#<thread thread-7 runnable 0x802044b0>#f:changed-before
Expected result:
#<thread thread-44 runnable 0x80866190>10:changed
#<thread root runnable 0x8014ce10>10:changed-main
#<thread thread-45 runnable 0x80866000>:changed-main:changed-other
#<thread thread-42 runnable 0x80866320>10:changed-before
Comments (1)
-
reporter - Log in to comment
Adding global storage for parameter initial values (Fixes
#126) This change propagates parameters initial values to other thread even if the parameter is create in child thread.→ <<cset e07976789c59>>