<div dir="ltr"><div><div><div><div><div>Hi David,<br><br></div>Thanks for your reply. <br>I wrote the futures library just as an exercise for learning Common Lisp.<br></div>You can download it here: <a href="http://ubuntuone.com/4XEnbbdvhccGOqC6WqGJ3S">http://ubuntuone.com/4XEnbbdvhccGOqC6WqGJ3S</a>. BTW, I am still debugging it!<br>
<br></div>I am on CCL 1.10 dev trunk.<br><br></div>Thanks,<br><br></div>--Vijay<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Mar 21, 2013 at 7:57 PM, David L. Rager <span dir="ltr"><<a href="mailto:ragerdl@gmail.com" target="_blank">ragerdl@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Vijay,<br>
<br>
Welcome to the world of CCL threads!<br>
<br>
I don't yet know the answer to your first question.  However, maybe<br>
you can figure it out with this debugging hint:  I have my own<br>
multi-threading package, so this will look like pseudo-code.  The most<br>
common thing I do is interrupt a thread and view its backtrace, which<br>
should help you in this instance.<br>
<br>
(all-threads)  ; or :proc, or (ccl:all-processes) iirc<br>
(interrupt-thread (nth <n> (all-threads)) #'break)<br>
:y <thread-number-to-yield-to><br>
:b ; for backtrace<br>
<other common debugging features><br>
<br>
Is your futures library available?  There are various Lisp libraries<br>
that provide parallel execution.  For example, Vladamir Sedach<br>
provides an eager futures library [<br>
<a href="http://common-lisp.net/project/eager-future/" target="_blank">http://common-lisp.net/project/eager-future/</a> ].  Also, I provide a<br>
"plet" primitive (and others, like "spec-mv-let") for ACL2, which is<br>
built on top of CL [<br>
<a href="http://www.cs.utexas.edu/users/moore/acl2/current/PLET.html" target="_blank">http://www.cs.utexas.edu/users/moore/acl2/current/PLET.html</a> ].  If<br>
you'd like more information about the latter, feel free to inquire<br>
(probably off the list-serve).<br>
<br>
David<br>
<br>
PS -- setf can be different than just using let.  Maybe using or not<br>
using special variables is part of the issue?<br>
PPS -- are you on CCL 1.9 or later?  There was a bug for a little bit<br>
right before the 1.9 release, but I'd be surprised if you were hitting<br>
it in this simple test case.<br>
<div><div class="h5"><br>
<br>
On Thu, Mar 21, 2013 at 5:41 AM, Vijay Mathew<br>
<<a href="mailto:vijay.the.lisper@gmail.com">vijay.the.lisper@gmail.com</a>> wrote:<br>
> Consider this code snippet which demonstrates a "futures" package for<br>
> executing computations asynchronously:<br>
><br>
> (setf e (futures:make-pool-executor 2))<br>
> (setf f1 (futures:executor-submit e #'(lambda (x) (* x 2)) 100))<br>
> (setf f2 (futures:executor-submit e #'(lambda (x y) (+ x y)) 200 300))<br>
> (format t "~A~%" (futures:future-result f1))<br>
> (format t "~A~%" (futures:future-result f2))<br>
> (futures:executor-shutdown e nil)<br>
><br>
> `pool-executor' internally uses a pool of ccl threads for executing the jobs<br>
> submitted to it. Now if I rewrite the same sample using `let' bindings, the<br>
> call to `future-result' just hangs. The threads actually run, but it seems<br>
> `future-result' somehow do not see the updated value of the internal<br>
> `result' slot.<br>
><br>
> If I load this script, it just hangs the CCL REPL:<br>
><br>
> (let ((e (futures:make-pool-executor 2)))<br>
>   (let ((f1 (futures:executor-submit e #'(lambda (x) (* x 2)) 100))<br>
>         (f2 (futures:executor-submit e #'(lambda (x y) (+ x y)) 200 300)))<br>
>     (format t "~A~%" (futures:future-result f1))<br>
>     (format t "~A~%" (futures:future-result f2))<br>
>     (futures:executor-shutdown e nil)))<br>
><br>
> Also I would like to learn about the best way to debug programs that use CCL<br>
> threads.<br>
><br>
> I am new to Common Lisp and the kind of support I am getting from this<br>
> mailing list is very encouraging!<br>
><br>
> Thank you,<br>
><br>
> --Vijay<br>
><br>
><br>
</div></div>> _______________________________________________<br>
> Openmcl-devel mailing list<br>
> <a href="mailto:Openmcl-devel@clozure.com">Openmcl-devel@clozure.com</a><br>
> <a href="http://clozure.com/mailman/listinfo/openmcl-devel" target="_blank">http://clozure.com/mailman/listinfo/openmcl-devel</a><br>
><br>
</blockquote></div><br></div>