You deferred updates to the owner via scheduler, with high prio, and continue.
parrot threads are lock free but not wait free.
The NQP compiler needed to know about threaded writes and schedule the update, with a semaphore, while the other threads continue.
What MoarVM got better was everything else. The GC, the calling convention, the OO (6model), the jit.
I was on my way to fix all the parrot damage done from the previous decade, because this would have enabled all architectures and proper threading for perl6, but then perl6 decided to kill it and go with Moar.
And spread a lot of lies on threads.