2009-04-07 2 views
1

여러 스레드에서 액세스 할 수있는 CFile 개체가 있습니다. 다른 스레드가 파일에서 데이터를 읽는 동안 한 스레드가이 파일에 데이터를 쓰는 가능성이 있습니다. 이 정책에있어 안전하지 못한 점이 있습니까? 쓰기 또는 읽기 프로세스가 완료되기 전에 파일 포인터가 변경 될 수 있습니까? 대답은 '예'입니다. 동시에 읽거나 쓰는 멀티 스레드의 안전을 피하는 방법은 무엇입니까?CFile 개체의 쓰기 또는 읽기 프로세스 중에 파일 포인터가 변경 될 수 있습니다.

대단히 감사합니다!

답변

1

CFile 개체는 스레드로부터 안전하지 않습니다. 여러 스레드에서 액세스해야하는 경우 자체 동기화를 수행해야합니다. http://msdn.microsoft.com/en-us/library/aa270950.aspx에서

:

액세스 객체 다중 스레드, MFC 객체가 스레드 안전하지 않은 개체 수준에서, 단지 클래스 레벨에서 크기와 성능 이유로

에서. 즉 두 개의 개의 별도 스레드가 두 개의 개의 CString 객체를 조작 할 수 있지만 두 개의 스레드는 동일한 CString 객체를 조작하지 못합니다. 만약 당신이 같은 복수의 스레드를 조작해야만한다면, 객체를 가지고, 과 같은 접근을 보호 할 것입니다. 임계 영역과 같은 적절한 Win32 동기화 메카니즘. 중요 섹션 및 기타 관련 개체에 대한 자세한 내용은 을 참조하십시오.

클래스 라이브러리는 내부적으로 섹션을 사용하여 에서 디버그 메모리 할당과 같이 전역 데이터 구조를 보호합니다.