What does interruptibility mean exactly?
Simon Marlow
marlowsd at gmail.com
Tue Jun 15 06:41:51 EDT 2010
On 15/06/2010 09:00, Bas van Dijk wrote:
> On Mon, Jun 14, 2010 at 11:20 PM, Don Stewart<dons at 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
More information about the Glasgow-haskell-users
mailing list