Während des Studiums von Versandqueue bin ich auf etwas gestoßen, das ich nicht ganz verstehe. Als ich den Thread, in dem der Block ausgeführt wurde, druckte, stellte sich heraus, dass es sich um den Hauptfaden handelte. Dies verwirrte mich, weil die Warteschlange nicht die Hauptwarteschlange war, der Block jedoch immer noch im Haupt -Thread ausgeführt wurde. < /P>
let serialQueue = DispatchQueue(label: "serial.queue")
serialQueue.sync {
print("current thread = \(Thread.current)") // current thread = _NSMainThread
}
< /code>
In der Dokumentation für sync () fand ich die folgende Anweisung: < /p>
Als Leistungsoptimierung führt diese Funktion Blöcke aus, wenn möglich, wenn möglich, mit einer Ausnahme eingereicht. /> Basierend auf dieser Beschreibung nahm ich an, dass, wenn der Block tatsächlich auf dem aktuellen Thread ausgeführt wurde (in diesem Fall der Haupt -Thread), ein Deadlock aufgetreten sein sollte. Da es synchron ist, wird der Hauptfaden blockiert, bis der Block abgeschlossen ist. /> Aber im Gegensatz zu meiner Erwartung trat kein Deadlock auf und der Code wurde in Ordnung ausgeführt. Ich kann nicht herausfinden, warum. Dieser Fall? < /li>
[*] Kann der Haupt -Thread noch andere Aufgaben ausführen, während er blockiert ist? Ich würde gerne verstehen, wie genau der Haupt -Thread funktioniert.
Warum führt das Aufrufen von Serialqueue.Sync () zu einem Deadlock? ⇐ IOS
-
- Similar Topics
- Replies
- Views
- Last post