2009-04-07 3 views
1

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

спасибо!

ответ

1

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^