0
int main(void) {
dispatch_queue_t queue = dispatch_queue_create(“com.somecompany.queue”, nil);
dispatch_sync(queue, ^{ // task 1
NSLog(@"Situation 1");
});
return 0;
}
これはmain()で正常に実行されます。メインで作成された同期コールのシリアルキューは正常ですが、メインの同期コールメインキューはDEAD-LOCKです
// -------------------------------------------
int main(void) {
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{ // task 1
NSLog(@"Situation 2");
});
return 0;
}
これはメイン()のDEAD-LOCKです。
// -------------------------------------------
状況2がDEAD-LOCKの間に状況1がOKであるのはなぜですか?どちらもメインスレッドの同期呼び出しシリアルキューです。
または、単にsync()自体がメインキューで実行されるためですか?
これは、 'int main(void){NSLog(@" Task 1 "); return 0;} '、' NSLog() 'はメインキューで実行されますか?または 'main()'で実行されるすべての関数がメインキューで実行されますか? – aByn
プログラム内のすべてが、別のキューに明示的にディスパッチするコードを除いて、メインキューで実行されます。メインキューのコードは常にメインスレッド上で実行されます。別のキューにディスパッチされたコードは、メインスレッド上で実行される場合と実行されない場合があります。 – Paulw11
ああそうです! Thx to @ Paulw11、今私は物事を知っている。 – aByn