C++类是否解决函数覆盖问题

Do C++ classes solve function overwriting?

本文关键字:覆盖 问题 函数 解决 是否 C++      更新时间:2023-10-16

所以我有两个线程正在运行,每个线程调用相同的函数。我要么遇到了比赛情况,要么值在函数 SomeFunction 中搞砸了。我假设每个线程都不会有自己的 SomeFunction 副本,对吗?

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 放在一个类中并在每个线程中创建一个新类,这会解决每个线程调用相同函数的问题,从而踩踏之前可能调用过 SomeFunction(( 的另一个线程的值?每个线程是否在内存中获取自己的 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;    
}

如果我说得不够清楚,请告诉我。

两个线程将运行相同的代码(代码是共享的(。

但是每个线程都有自己的私有局部变量集。因此,线程不会更改其他线程使用的变量(如果变量是函数的局部变量(。现在,如果变量是全局的,那么所有的赌注都关闭了。

将其更改为使用类绝对不会产生任何影响。函数的本地变量(和对象的本地变量(将不会在线程之间共享。但全局变量仍将共享。

还有第三种类型的变量(本地(自动存储持续时间(、全局(静态存储持续时间(除外(。第三种类型是线程本地(线程存储持续时间(。这些类似于全局变量(它们不是函数或对象的局部变量(,但每个线程都有自己的变量副本(因此它们不像全局变量那样交互(,但它们不是函数或对象的局部变量。