throwTo semantics

Simon Marlow marlowsd at
Tue Aug 13 16:54:25 CEST 2013

On 28/07/13 14:36, Roman Cheplyaka wrote:
> The documentation for throwTo says:
>    throwTo does not return until the exception has been raised in the
>    target thread. The calling thread can thus be certain that the target
>    thread has received the exception. This is a useful property to know
>    when dealing with race conditions: eg. if there are two threads that
>    can kill each other, it is guaranteed that only one of the threads
>    will get to kill the other.
> I don't see how the last sentense follows. I understood it so that the
> implication
>    throwTo has returned => exception has been delivered
> is true, but not the reverse. If my understanding is correct, then both
> exceptions could be delivered without any of throwTos returning.

Perhaps this needs to be clarified.  The extra information is: if a 
thread's next operation is a throwTo, then it may either receive an 
exception from another thread *or* perform the throwTo, but not both. 
Informally, there's no state of the system in which the exception is "in 
flight": it has either been delivered or not.


More information about the Glasgow-haskell-users mailing list