[
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: | 2009-09-08 (23:20) |
From: | Philippe Wang <philippe.wang.lists@g...> |
Subject: | Re: [Caml-list] threads |
Hi, > let x = Array.make 100 [] > let update i n = x.(i) <- n :: x.(i) > let read i = x.(i) I don't think you can obtain funny results when you don't put a mutex on these two specific "update" and "read". What is sure is that "update" function is not atomic because you have a value allocation at the right of "<-" (with :: operator), and this may trigger garbage collection and/or make the scheduler change the running thread. What you can be sure with the current official OCaml distribution is that there won't be at the exact same time both an (<-)operation and a (.())operation. But it is actually possible, for instance, for a thread to compute while another one is simultaneously writing on a socket. So it is generally not a good idea to count on some operation atomicity to put or not a mutex lock (well it's good to write some hard-to-debug code)... Cheers, Philippe Wang On Tue, Sep 8, 2009 at 7:33 PM, ygrek <ygrekheretix@gmail.com> wrote: > Hello, > > let x = Array.make 100 [] > let update i n = x.(i) <- n :: x.(i) > let read i = x.(i) > > Consider the following scenario: one thread is `update`ing x, another > thread(s) uses only `read`. Is it safe to use these functions without > locking on mutex? > > I.e. is Array.set atomic? What about updating references (:=) ? > > If I understand correctly these operations require only one cpu > instruction to update one machine word and so should be atomic. Taking > into account "single-cpu affinity" of ocaml program it should be safe > to write such multithreaded code. Is it true? > > Is it safe to assume that ocamlopt won't skip reads/writes to globally > visible memory address using cached value in a register? > > -- > ygrek > http://ygrek.org.ua > > _______________________________________________ > Caml-list mailing list. Subscription management: > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list > Archives: http://caml.inria.fr > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs > > -- Philippe Wang mail@philippewang.info