CRITICAL_SECTION
클래스의 스레드 기능을 안전하게 수행하고 소켓 작업을 보내기/받기 하고 많은 작업을 수행 할 수 있지만 스레드가 로그 파일에 쓰는 경우 문제가 발생합니다. !다중 스레드 코드의 파일 I/O 문제
H
class ClassA
{
public:
ClassA();
~ClassA();
void run();
...
private:
CRITICAL_SECTION criticalSection;
LogFiles *m_logFiles;
...
};
CPP는
ClassA::ClassA()
{
m_logFiles = new LogFiles();
InitializeCriticalSection(&criticalSection);
}
ClassA::~ClassA()
{
delete m_logFiles;
DeleteCriticalSection(&criticalSection);
}
void ClassA::run()
{
EnterCriticalSection(&criticalSection);
// do some stuff
m_logFiles->WriteToFile(message);
// do some stuff
m_logFiles->WriteToFile(message);
LeaveCriticalSection(&criticalSection);
}
로그 파일은 모든 정보 (4 개 쓰레드의 예 (2)로부터의 데이터 만) 또는 덮어 라인 (2 개 스레드가 동일한에서 작성한 포함 시각)!
그래서 LogFiles에서 WriteToFile 메서드를 보호해야한다고 생각하십니까?!
도움을 주셔서 감사합니다.
각 스레드에서 클래스 A의 단일 (동일한) 객체를 사용 하시겠습니까? – AnatolyS
모든 스레드는 동일한 'CRITICAL_SECTION' 개체를'잠금/잠금 해제 '해야합니다. 그들이 할 수 있다고 확신합니까? – HAL
@AnatolyS : 예, 모든 스레드가 동일한 ClassA 객체를 사용합니다 – leon22