Quoth Claude Heiland-Allen <claudiusmaxi...@goto10.org>, ... > The conclusion I drew was that "unsafe" foreign functions block the > current "capability" (OS thread) and any "threads" (Haskell forkIO etc) > currently scheduled on that capability, but other capabilities and > threads continue executing as normal.
If a trivial test program would help, here I call the sleep() function, which I believe on a POSIX platform suspends the thread until receipt of a SIGALRM. If "unsafe", during the execution of sleep() in one thread, Haskell execution will be blocked in the other, so they will alternate. If "safe", the two sleep intervals will overlap. I believe we all now expect that, but if it does come as a surprise, I hope someone will test it on a more common platform. +RTS -N2 makes no difference. Donn Cave, d...@avvanta.com ----------------------------------- {-# LANGUAGE ForeignFunctionInterface #-} module Main (main) where import Control.Concurrent (forkOS) import Foreign import Foreign.C foreign import ccall unsafe "sleep" sleep :: CInt -> IO CInt rep :: (CInt -> IO CInt) -> CInt -> IO () rep f s = do print s f s rep f s main = do forkOS $ rep sleep 3 rep sleep 1 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe