[Openmcl-devel] binding with threads

Vijay Mathew vijay.the.lisper at gmail.com
Thu Mar 21 03:41:51 PDT 2013


Consider this code snippet which demonstrates a "futures" package for
executing computations asynchronously:

(setf e (futures:make-pool-executor 2))
(setf f1 (futures:executor-submit e #'(lambda (x) (* x 2)) 100))
(setf f2 (futures:executor-submit e #'(lambda (x y) (+ x y)) 200 300))
(format t "~A~%" (futures:future-result f1))
(format t "~A~%" (futures:future-result f2))
(futures:executor-shutdown e nil)

`pool-executor' internally uses a pool of ccl threads for executing the jobs
submitted to it. Now if I rewrite the same sample using `let' bindings, the
call to `future-result' just hangs. The threads actually run, but it seems
`future-result' somehow do not see the updated value of the internal
`result' slot.

If I load this script, it just hangs the CCL REPL:

(let ((e (futures:make-pool-executor 2)))
  (let ((f1 (futures:executor-submit e #'(lambda (x) (* x 2)) 100))
        (f2 (futures:executor-submit e #'(lambda (x y) (+ x y)) 200 300)))
    (format t "~A~%" (futures:future-result f1))
    (format t "~A~%" (futures:future-result f2))
    (futures:executor-shutdown e nil)))

Also I would like to learn about the best way to debug programs that use
CCL threads.

I am new to Common Lisp and the kind of support I am getting from this
mailing list is very encouraging!

Thank you,

--Vijay
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20130321/c5f1bbaf/attachment.htm>


More information about the Openmcl-devel mailing list