[Haskell-cafe] Re: FFI and callbacks
John Goerzen
jgoerzen at complete.org
Wed Jul 20 13:49:03 EDT 2005
On 2005-07-20, Simon Marlow <simonmar at microsoft.com> wrote:
> This paper might help shed some light:
>
> http://www.haskell.org/~simonmar/papers/conc-ffi.pdf
Forgot to reply to this. *Very helpful* link, I had always wondered
what the bound thread functions in Control.Concurrent were for :-)
So let me see if I understand this correctly.
Let's say that I have:
* A program that uses multiple lightweight Haskell threads (all started
with plain forkIO calls)
* An event-driven C library, not not thread-aware, with a blocking main
loop
* GHC 6.4
* My C calls all imported "safe".
Now then, if I understand this correctly, that a call to the C main loop
will create a new bound OS thread, so it will not interrupt any other
forkIO'd threads in Haskell.
However, if one of my Haskell-based callbacks creates new threads with
forkIO, I could be in trouble; if they make any calls into C, a new
bound OS thread would be created for them, and this could wind up
causing trouble in C. I would probably need some sort of "global MVar"
to synchronize access into the C world.
I also have some follow-up questions after looking at the
Control.Concurrent API:
1. It seems that there is no function that says "block the current
thread until the thread given by ThreadId dies"
2. What is the preferred way to implement a simple lock? With an MVar?
Thanks.
More information about the Haskell-Cafe
mailing list