Может ли указатель файла измениться в процессе записи или чтения объекта CFile
У меня есть объект CFile, к которому могут обращаться несколько потоков. Существует вероятность того, что один поток записывает данные в этот файл, в то время как другой поток считывает данные из файла. Я хочу знать, есть ли какая-либо небезопасность в рамках этой политики? Может ли указатель файла измениться до завершения процесса записи или чтения? Ответ - да, как избежать небезопасности многопоточности, которая может одновременно считывать или писать?
Большое спасибо!
1 ответ
CFile
объекты не являются потокобезопасными. Если вам нужен доступ к ним из нескольких потоков, вам необходимо выполнить собственную синхронизацию.
С http://msdn.microsoft.com/en-us/library/aa270950.aspx:
Доступ к объектам из нескольких потоков
По причинам размера и производительности объекты MFC не являются поточно-ориентированными на уровне объектов, а только на уровне классов. Это означает, что вы можете иметь два отдельных потока, управляющих двумя разными объектами CString, но не два потока, управляющих одним и тем же объектом CString. Если вам абсолютно необходимо иметь несколько потоков, управляющих одним и тем же объектом, защитите такой доступ с помощью соответствующих механизмов синхронизации Win32, таких как критические секции. Для получения дополнительной информации о критических разделах и других связанных объектах см. Win32 SDK.
Библиотека классов использует критические секции внутри для защиты глобальных структур данных, таких как те, которые используются для выделения памяти отладки.