Why it's dangerous to fork off a new process in Glasgow Haskell
Wed, 4 Sep 2002 10:46:03 +0200
In local.glasgow-haskell-users, you wrote:
> In other words, it sounds like the right thing is to protect access to
> the servers with some kind of lock (MVar, Semaphore, etc.).
> Is there a reason why this won't work?
That's what I thought, too, but then it turned out to be a real
hassle to rewrite the entire application to synchronise on a
specific location. I'm also quite sure that this would introduce
accidental deadlocks for non-trivial concurrent systems.
Assume you have some kind of asynchronous database running in a
separate thread, listening on a channel for requests. Now you have
to introduce a construct which not only waits (suspends) on the
channel, but even on another MVar (or add a new "command" for shut
down). I tried this, but it really turned out to be much more
overhead, especially in terms of maintainability of the source-code.
Granted, from the software-engineering point of few, it is much
cleaner, but on the other hand, you have the already existing
semantics of fork() in a pthread which does exactly the same: Only
fork the current thread and not the others.
I was toying with two functions called freezeThread and thawThread
which would allow you to selectively halt and resume threads, but
even the Java-guys dropped that from their specs because of the
potential havoc you could cause.
plonk :: m a -> m ()
http://www-i2.informatik.rwth-aachen.de/stolz/ *** PGP *** S/MIME