
On 2005-07-20, Simon Marlow
This paper might help shed some light:
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.