그래서 두 개의 스레드가 실행 중이며 각각 동일한 함수를 호출합니다. 나는 경주 상황에 빠지거나 값이 SomeFunction 함수에서 엉망이되었습니다. 나는 각 스레드가 자신의 SomeFunction 사본을 가지지 않을 것이라고 가정한다. 나는 클래스에서 SomeFunction을 넣어 그 같은 함수를 호출 각 스레드의 문제를 해결할 것입니다, 각 스레드에서 새로운 클래스를 생성하고, 따라서 이상 쾅쾅 경우C++ 클래스가 함수 덮어 쓰기를 해결합니까?
DWORD Thread1() {
INT dwA = 4;
SomeFunction(dwA);
}
DWORD Thread2() {
INT dwB = 5;
return SomeFunction(dwB);
}
DWORD SomeFunction(DWORD *dwVal) {
// do some lengthy operations with dwVal here
return dwVal;
}
내 질문은, 대신 위의입니다 SomeFunction()을 전에 호출했을 가능성이있는 다른 thread의 값 이 문제를 피하기 위해 각 스레드가 자체 함수 SomeFunction을 메모리에 가져 왔습니까?
class.h:
class CDatabase
{
public:
CClass();
~CClass();
DWORD CClass::SomeFunction(DWORD *dwVal);
};
class.cpp
CClass::CClass() {}
CClass::~CClass() {}
DWORD CClass::SomeFunction(DWORD *dwVal) {
// do some lengthy operations with dwVal here
return dwVal;
}
그리고 각 스레드에 넣었습니까?
DWORD Thread1() {
INT dwA = 4;
CClass *m_CDatabase = new CClass();
DWORD rv = m_CDatabase->SomeFunction(dwA);
delete m_CDatabase;
return rv;
}
DWORD Thread2() {
INT dwA = 5;
CClass *m_CClass = new CClass();
DWORD rv = m_CClass->SomeFunction(dwA);
delete m_CClass;
return rv;
}
내가 충분히 명확하지 않으면 알려 주시기 바랍니다.
경주 조건과 관련하여 * 아무것도 * 변경되지 않습니다. –
어쩌면 "race"가 내가 사용해야 할 정확한 단어가 아닐지도 모릅니다. – JeffR
모든 경고를 사용하도록 컴파일하고 오류로 처리합니다. 코드 스 니펫 (snippet)이 무엇이든 나타내면 'SomeFunction (& dwA)'와 같은 앰퍼샌드를 잊어 버린 것입니다. – StoryTeller