Atomic Operation Function
Make the atomic operation a function so that it is explicit. It is also easier to document the fact that the atomic operation must not be asynchronous if you specify it as a return value from a function with no arguments.
Copy of Callbacks
Take a slice of the callbacks before invoking the turnstile, instead of calling all callbacks after invoking the turnstile. That's a race condition because the callback could have been added after the turnstile was entered.