In fact, I think the extra `clear` call I suggested is potentially harmful:  it introduces potential for a race condition.  ((1) `execute` starts executing, (2) another thread calls `abort_execution`, (3) `execute` gets to the `clear` line and clears the just-set event.)  Your original solution was better.  (Sorry about that.)

Concurrent-programming-is-hard'ly yours,