It works in the current / calling thread. If you want, I suppose you could use dispatch_syncto make sure that it works in the background thread, but I'm not sure what you would get. In general, it works in the current thread. If another thread is already in the block dispatch_once, the calling thread will block until the block completes execution in the other thread, and then continue.
ipmcc source
share