2010-11-26 9 views
2

Angenommen, zwei asynchrone Operationen versuchen in derselben Datei in einem bestimmten Ordner zu lesen oder zu schreiben. Wie geht iOS damit um? Sind die Vorgänge in der Warteschlange? Die App stürzt ab? Die Datei wird beschädigt?iphone - Wie reagiert das Dateisystem auf den Zugriff auf die gleiche Datei zur gleichen Zeit?

Falls es dem Programmierer obliegt, sich damit zu befassen, wo finde ich Informationen oder ein Beispiel, wie man mit Rennbedingungen, Warteschlangen usw. umgeht?

Können Sie mir einen Tipp geben?

danke.

Antwort

1
+0

Äh, was ist deine Basis für das Denken "es sollte scheitern"? –

+0

Weil ich mich nicht erinnern kann und nicht sofort versuchen kann, wenn Sie einen Lese-Schreib-Zugriff auf eine Datei öffnen können, während es bereits von einem anderen Programm ist. Und die Fehlermeldung "Datei konnte nicht geöffnet werden ..., die Datei wird vielleicht von einem anderen Programm verwendet" ist heutzutage sehr verbreitet. Ich bin mir ziemlich sicher, dass die Funktion einen Fehlercode zurückgibt, wenn Sie versuchen, einen Dateideskriptor für eine bereits geöffnete Datei zu erhalten. –

+0

möchten Sie die Funktion auf Back-End dann tun, wie ich Tabelle erstellen und in Backend-Telefon kommen aus Webservice und wenn es fertig ist auf Tabelle anzeigen \t \t \t [NSThread detachNewThreadSelector: @selector (loadImagesInBackground :) toTarget: self withObject: [ NSNummer numberWithInt: indexPath.row]]; – GhostRider

1

Die wahrscheinlichste Antwort ist "die Datei wird beschädigt". Das Betriebssystem wird nichts tun, um zu verhindern, dass mehrere Threads gleichzeitig in eine Datei schreiben, und wenn sie in überlappende Abschnitte der Datei schreiben, sind alle Wetten deaktiviert.

Also, Ihre beste Wette ist es, Ihre eigenen Warteschlangen beim Zugriff auf die Datei zu erzwingen. Dazu gibt es viele Möglichkeiten. Auf niedriger Ebene können Sie einen NSLock verwenden, um den gleichzeitigen Zugriff zu verhindern, oder Sie möchten möglicherweise eine Dispatch-Warteschlange verwenden. Die von Julio's Antwort erwähnte Concurrency Programming Guide ist eine gute Referenz.

Verwandte Themen