Ich habe einige Zweifel über das Verhalten dieses Codes:
%Vor% Von diesen Zeilen erwartete ich als Ausgabe step1 -> step3 -> step2
, aber ich erhalte nur step1
.
Wenn ich dispatch_sync mit dispatch_async ändere, funktioniert es wie erwartet, erzeugt dispatch_sync in einen dispatch_async-Aufruf diese Art von Problem?
Nach Antworten bearbeiten ----------------
Dieser Fall erstellt einen Deadlock:
Sie können die akzeptierte Antwort überprüfen, um eine Erklärung zu dieser Situation zu erhalten, und diesen Link für die Dokumentation überprüfen Ссылка
Das ist ein Deadlock.
Der Aufruf dispatch_sync
wartet, bis queue
verfügbar ist, bevor der Block ausgeführt und zurückgegeben wird, aber das ist erst verfügbar, wenn dispatch_async
beendet ist. Er wird also nur dort sitzen und warten, bis er dispatch_sync
aufruft. .
Tags und Links objective-c ios grand-central-dispatch