2009-04-07 5 views
1

Ich habe ein CFile-Objekt, auf das mehrere Threads zugreifen können. Es besteht die Möglichkeit, dass ein Thread Daten in diese Datei schreibt, während ein anderer Thread Daten aus der Datei liest. Ich möchte wissen, gibt es irgendwelche Unsicherheiten unter dieser Politik? Kann sich der Dateizeiger ändern, bevor der Schreib- oder Lesevorgang abgeschlossen ist? Ist die Antwort ja, wie kann man die Unsicherheit von Multithread vermeiden, die gleichzeitig lesen oder schreiben kann?Kann Dateizeiger während des Schreibens oder Lesevorgangs eines CFile-Objekts ändern

Vielen Dank!

Antwort

1

CFile Objekte sind nicht threadsicher. Wenn Sie aus mehreren Threads darauf zugreifen müssen, müssen Sie eine eigene Synchronisierung durchführen.

Von http://msdn.microsoft.com/en-us/library/aa270950.aspx:

Zugriff auf Objekte von mehreren Threads

Für Größe und Performance-Gründen MFC Objekte sind nicht Thread-sicher am Objektebene nur auf Klassenebene. Das bedeutet, dass Sie zwei separate Threads haben können, die zwei verschiedene CString-Objekte manipulieren, aber nicht zwei Threads, die dasselbe CString-Objekt bearbeiten. Wenn Sie unbedingt müssen mehrere Threads manipulieren die gleichen Objekt, schützen Sie einen solchen Zugriff mit entsprechenden Win32-Synchronisation Mechanismen, wie kritische Abschnitte. Weitere Informationen zu kritischen Abschnitten und anderen verwandten Objekten finden Sie unterim Win32-SDK.

Die Klassenbibliothek verwendet kritische Abschnitte intern globale Datenstrukturen, wie sie von die Debug-Speicherzuweisung verwendet zu schützen.

Verwandte Themen