There’s dispatch_sync to do some work synchronously. There’s also dispatch_once that’s used to guarantee that something happens exactly once, no matter how violent the program’s threading becomes. It’s actually a very simple idiom:
static dispatch_once_t onceToken; dispatch_once (&onceToken, ^{ // Do some work that happens once });
A good article to understand dispatch_once