Peter Strand wrote:


Hi,


I'd like to use a C-library which calls back into the haskell
program, potentially from different threads at the same time.

That is, the following calling sequence takes place:
 (haskell) Calls C via foreign import.
 (c)       Creates threads, which in turn calls back into
           haskell via foreign exported functions.

Is this supported in ghc?

Some simple tests suggests that it does work, at least I don't
get any crashes, if ghc is compiled with --enable-threaded-rts.
But is this intended to work or am I just lucky?

Yes, this is indeed what --enable-threaded-rts is intended for. Beware that the code is not well-tested (that's why it's a separate option); however, there are no known bugs (if you encounter any, please tell me).


You should also be aware of one remaining problem, which will be fixed in the upcoming GHC 6.2:Your C-library must not rely on the use of "thread-local state" (that is, pthread_key_create on unix and TlsAlloc on Win32); basically, when you call a foreign import, you don't know in what thread it will be executed (there's some interthread messaging and some black magic going on here). For the same reason, the value of errno cannot be reliably accessed from Haskell with GHC 6.0.
Most libraries are entirely unaffected by this problem, but I thought I'd warn you just in case.


Cheers,

Wolfgang


_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to