Может ли указатель файла измениться в процессе записи или чтения объекта CFile - PullRequest
1 голос
/ 07 апреля 2009

У меня есть объект CFile, к которому могут обращаться несколько потоков. Существует вероятность того, что один поток записывает данные в этот файл, в то время как другой поток считывает данные из файла. Я хочу знать, есть ли какая-либо небезопасность в рамках этой политики? Может ли указатель файла измениться до завершения процесса записи или чтения? Ответ - да, как избежать небезопасности многопоточности, которая может одновременно считывать или писать?

Большое спасибо!

1 Ответ

1 голос
/ 07 апреля 2009

CFile объекты не являются потокобезопасными. Если вам нужен доступ к ним из нескольких потоков, вам необходимо выполнить собственную синхронизацию.

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

Доступ к объектам из нескольких потоков

Из соображений размера и производительности MFC объекты не являются потокобезопасными на уровень объекта, только на уровне класса. Это означает, что вы можете иметь два отдельные темы, манипулирующие двумя разные объекты CString, но не два потоки, манипулирующие одной и той же CString объект. Если вы обязательно должны иметь несколько потоков, манипулирующих одним и тем же защищать такой доступ соответствующая синхронизация Win32 механизмы, такие как критические секции. Для получения дополнительной информации о критических разделы и другие связанные объекты, см. в Win32 SDK.

Библиотека классов использует критические разделы внутри, чтобы защитить глобальные структуры данных, такие как те, которые используются распределение памяти отладки.

...