
On 21 July 2005 08:07, Bulat Ziganshin wrote:
Hello Simon,
Thursday, July 21, 2005, 1:16:10 AM, you wrote:
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.
Bingo. This is why you need to make all your calls to the C library from a single thread.
you can either: 1) made all calls from single thread 2) put all calls in "withMVar lock", where `lock` is a global MVar
You can't always do (2), because some libraries (eg. OpenGL) use per-thread state. So you really can only call into OpenGL from a single thread, and it must always be the same thread (this is why we introduced bound threads, as it happens). Cheers, Simon