Re: throwTo semantics

2013-08-13 Thread Simon Marlow

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.


Cheers,
Simon


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


throwTo semantics

2013-07-28 Thread Roman Cheplyaka
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.

Or is it true that

  throwTo has returned = exception has been delivered

?

Roman

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


Re: throwTo semantics

2013-07-28 Thread Bertram Felgenhauer
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 agree that it does not follow logically, at least I don't see how.
It is an additional guarantee that the implementation provides.

 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.
 
 Or is it true that
 
   throwTo has returned = exception has been delivered

Yes, that's true, in the sense that if and only if the exception
has been delivered, the thread is ready to run (i.e., not blocked),
to continue right after the throwTo.

The implication from left to right does not mean that the thread
ever gets a chance to run again. The program may terminate, or
the thread may receive another exception in the meantime. The
latter can be prevented by masking exceptions.

I hope that makes sense.

Bertram

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


Re: throwTo semantics

2013-07-28 Thread Roman Cheplyaka
* Bertram Felgenhauer bertram.felgenha...@googlemail.com [2013-07-28 
17:57:04+0200]
 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 agree that it does not follow logically, at least I don't see how.
 It is an additional guarantee that the implementation provides.
 
  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.
  
  Or is it true that
  
throwTo has returned = exception has been delivered
 
 Yes, that's true, in the sense that if and only if the exception
 has been delivered, the thread is ready to run (i.e., not blocked),
 to continue right after the throwTo.
 
 The implication from left to right does not mean that the thread
 ever gets a chance to run again. The program may terminate, or
 the thread may receive another exception in the meantime. The
 latter can be prevented by masking exceptions.
 
 I hope that makes sense.

Thanks Bertram, this makes perfect sense. I wonder if the docs should be
updated to clarify this?

Roman

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