[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | victor-caml-list@n... |
| Subject: | Lazy and Threads |
Hello,
I'm working with both lazy expressions and threads, and noticed that the
evaluation of lazy expressions is not thread-safe:
let expr = lazy (Thread.delay 1.0)
let _ =
let thread = Thread.create (fun () -> Lazy.force expr) () in
Lazy.force expr;
Thread.join thread
The second thread to attempt an evaluation dies with Lazy.Undefined. The
source of this appears to be the standard Lazy.force behavior, which
replaces the closure in the lazy-block with a raise_undefined closure in
order to detect self-recursing lazy expressions.
Aside from handling a mutex myself (which I don't find very elegant for
a read operation in a pure functional program) is there a solution I can
use to manipulate lazy expressions in a pure functional multi-threaded
program?
--
Victor Nicollet