Wie kann verhindert werden, dass wiederholt auf einen Codeblock von demselben Thread zugegriffen wird?Synchronisierung mehrerer Tasks auf einem einzelnen Thread
Angenommen, ich habe den nächsten Code:
func sendAnalytics() {
// some synchronous work
asyncTask() { _ in
completion()
}
}
Ich mag jeden Thread aus dem Zugriff auf "// einige synchrone Arbeit", zu verhindern, vor der Fertigstellung genannt wurde.
scheinen nur den Zugriff auf diesen Code aus mehreren Threads zu verhindern und speichern Sie mich nicht vom Zugriff auf diesen Code aus dem einzelnen Thread. Gibt es eine Möglichkeit, dies richtig zu tun, ohne benutzerdefinierte Lösungen zu verwenden?
Mein wiederholt Zugriff, ich meine, diese sendAnalytics aus einem Thread mehrmals aufrufen. Nehmen wir an, ich habe eine für, wie folgt aus:
for i in 0...10 {
sendAnalytics()
}
Jeder nächste Anruf wird nicht für die Fertigstellung warten innerhalb sendAnalytics aufgerufen (offensichtlich). Gibt es eine Möglichkeit, die nächsten Anrufe warten zu lassen, bevor der Abschluss ausgelöst wird? Oder die ganze Art zu denken ist falsch und ich muss dieses Problem höher lösen, am Körper?
Es hängt davon ab, ob der zweite Anrufer blockieren möchten, bis die erste der zweite Anruf – Paulw11
die überspringen oder einfach beendet hat blockieren zweiter Anrufer –
Dann verwenden Sie einen Dispatch_semaphore mit einer anfänglichen Zählung von 0. Vorsicht, die Hauptwarteschlange jedoch blockiert – Paulw11