On 12/5/06, Chris Kuklewicz <[EMAIL PROTECTED]> wrote:
Making small programs to test these properties is a good sanity check.  For
instance I just leaned that "safePoint = unblock ( return () )" does not work.

Maybe if you do something to allocate some memory inside of the unblock?


> If this were true, then if you caught an asynchronous exception from
> the putMVar operation, you'd know that a value was not put into the
> MVar by the operation.

I think that should be a safe assumption when running under "block".

"I think" and "should be" is nice, how do we find out if it's really
true -- for sure?


> Then it would be easy to program with MVar's in the presence of
> asynchronous exceptions.  When you caught an asynchronous exception,
> you could set a flag, and then redo the putMVar.

If you call that "easy" then sure.

> For STM, is "atomically" an interruptible operation?  If it is, what
> guarantees does it offer in the presence of asynchronous exceptions?

"block (atomically stm)" is interruptible when the operation "stm" uses retry
and perhaps when it has to be re-attempted due to conflicting updates.  If it
runs without conflict and commits then it cannot be interrupted by an async
exception.

If (atomically stm) is interrupted then it is rolled back and will have had no
visible side effects.

Easy in the sense that the pattern of "trying an operation, setting a
flag if an asynchronous exception is raised, and redoing the
operation" can be encapsulated in a function.

That function can then be used with any interruptible operation (such
as putMVar, or atomically, or accept) *if* the operation guarantees
that inside of a "block" it will either perform its operation, or
interrupt and allow an asynchronous to be raised, but not both.
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to