The wake logic should probably be easy, it's just a matter of signaling the sync at specific times. The satisfied logic on the other hand is perhaps more complicated, but I think there's always a `get_thread_completion` call after the wait so maybe it could be moved there? Just an idea though, as I haven't really investigated. The async looks much more difficult to me to change, the waits are spread out a bit everywhere on the client side.