Browse thread
Co-existing with non OCaml threads
[
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: | Xavier Leroy <Xavier.Leroy@i...> |
| Subject: | Re: [Caml-list] Co-existing with non OCaml threads |
Hi François, > [Interfacing Caml code with multithreaded C/C++ code] > The manual section for interfacing with C isn't mentionning threads > anywhere. Should Caml code be restricted to run on threads it has > created? Or can it run on any threads? It depends whether your Caml code is single-threaded or multi-threaded. Case 1: The Caml code is single-threaded (more precisely: it is not linked with Caml's threading library). For instance, Caml provides a number of functions that you will call back from the main C/C++ multithreaded program. In this case, you can call back Caml code from any thread. All you need to make sure is that you never call back from two threads concurrently. Just put a lock around the callbacks and you're done. Case 2: The Caml code is linked with Caml's threading library. Then, you can only call back from threads created by Caml, and as Gerd Stolpmann mentioned, there are additional subtleties to ensure mutual exclusion. I'd recommend you avoid this scenario. > How can I synchronize between a thread running C++ code and a thread > running OCaml code (i.e. both communicating on a message queue)? If your message queue is already implemented in C++, all you need to do is wrap the "put" and "get" operations of the message queue using the Caml foreign-function interface, and call these functions from your Caml code. Hope this helps, - Xavier