memory.init is not atomic, so without the fence there is no
guarantee that the initialized memory is visible on other threads once
they have been woken up by the initializing thread.
In sequentially consistent models, wouldn't this store serve as the fence anyway?
Yes, you're correct. I confused myself.