C++ reference has the following statement on the coroutine page:
Note that because the coroutine is fully suspended before entering
awaiter.await_suspend(), that function is free to transfer the coroutine handle across threads, with no additional synchronization.
A suspended coroutine is just plain data, so that does make sense. However, even when transferring plain data between threads, you do need synchronization. So why don't you need it here?
Am I misinterpreting this statement? Is there some implied memory barrier at work here?