On 02 February 2005 19:48, Peter Simons wrote: > Wolfgang Thaller writes: > > > a) poll() is not supported on Mac OS X and (at least some > > popular versions of) BSD. > > Are you certain? Just tried "man poll" on one of the MacOS X > machines the SourceForge compile farm offers, and that one > had it: "Darwin ppc-osx1 5.5 Darwin Kernel Version 5.5". > > > > b) 'forkIO' in the threaded RTS would suffice in this > > case, as the poll() or select() system calls don't use > > any thread-local state. In the threaded RTS, "safe" > > foreign imports never affect other threads [...]. > > That would be really good news! I assumed that GHC's runtime > system used one thread for _all_ FFI invocations? (Unless > you start new ones.) So I thought calling poll() would block > all other FFI invocations until it returned? > > Or is that only for "unsafe" FFI calls?
When you compile your program with -threaded, "safe" FFI calls don't block other threads, but "unsafe" calls still do. Basically a "safe" FFI call releases the lock on the RTS so other Haskell threads can continue to run (and that at least partly explains why we have the distinction: releasing and re-acquiring a lock is expensive). > Do you have an URL for me where I can find out more about > this, by any chance? There's not much, but the -threaded option is documented here: http://www.haskell.org/ghc/docs/latest/html/users_guide/options-phases.h tml#OPTIONS-LINKER and the Control.Concurrent documentation explains what "bound" threads are. Cheers, Simon _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users