[Haskell] Re: Strange behaviour of forkIO threads

Simon Marlow simonmarhaskell at gmail.com
Mon May 15 06:04:38 EDT 2006


Maurizio Monge wrote:
> Hi, i used forkIO to write a 'por' (parallel or) implementation
> (just a proof of concept), arguments are evaluated in different
> threads and as soon as one of the threads returns true the other
> thread is killed and true is returned.
> If both threads return false the result of the computation is false.
> 
> I have been doing a few tests and looks like that in some cases
> the function that do not terminate (that i used to test the por
> correctness) seam not be preempted, and thus the program do not
> terminate.
> The very strange thing is that the program (that i am attaching)
> works as expected if it is compiled with -O, but hangs if compiled
> without optimization!

It sounds like you are just falling foul of the fact that GHC only 
context switches when a thread is doing allocation; if it is sitting in 
a loop not doing any allocation then you won't see a context switch.  In 
GHC 6.6 you'll be able to work around this to some extent by using 2 
processors.

Cheers,
	Simon


More information about the Haskell mailing list