I can understand that thread 1 is waiting for thread 0’s dynamic linker lock. However, why is thread 0 waiting for thread 1? What is it waiting for? Even if they both call dispatch_once, unless they are calling on the same dispatch_once_t they should be independent to each other, right?