On 15/06/2010 09:00, Bas van Dijk wrote:
On Mon, Jun 14, 2010 at 11:20 PM, Don Stewart<d...@galois.com>  wrote:

v.dijk.bas:
Hello,

I've a short question about interruptible operations. In the following
program is it possible for 'putMVar' to re-throw asynchronous
exceptions even when asynchronous exception are blocked/masked?

   newEmptyMVar>>= \mv ->  block $ putMVar mv x

The documentation in Control.Exception about interruptible
operations[1] confused me:

"Some operations are interruptible, which means that they can receive
asynchronous exceptions even in the scope of a block. Any function
which may itself block is defined as interruptible..."


I think the best definition of interruptible is in this paper:

    www.haskell.org/~simonmar/papers/async.pdf

Section 5.3


Thanks for the link Don! Next time I will re-read the paper before asking ;-)

The definition makes it clear indeed:

"Any operation which may need to wait indefinitely for a resource
(e.g., takeMVar) may receive asynchronous exceptions even within an
enclosing block, BUT ONLY WHILE THE RESOURCE IS UNAVAILABLE"

So I guess I can update my threads package to use MVars again. Nice!
because they were a bit faster in an informal benchmark I performed
some time ago.

This is currently true for takeMVar/putMVar but it is no longer true for throwTo (in 6.14+). I'll update the docs to make that clear. The reason is that throwTo now works by message passing when the target is on another CPU, and we consider a thread that is waiting for a response to a message to be blocked - even if the throwTo can in fact proceed immediately because the target is interruptible.

Cheers,
        Simon


A later quote from 5.3 emphasizes the definition even more:

"...an interruptible operation cannot be interrupted if the resource
it is attempting to acquire is always available..."

The following darcs patch makes the definition of
interruptibility in the documentation in Control.Exception a bit
clearer in this regard:

http://bifunctor.homelinux.net/~bas/doc-interruptibility.dpatch

Regards,

Bas
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to