gpt4 book ai didi

c++ - C++ 类是否解决了函数覆盖问题?

转载 作者:行者123 更新时间:2023-11-28 01:40:54 24 4
gpt4 key购买 nike

所以我有两个线程在运行,每个线程都调用相同的函数。我要么遇到了竞争情况,要么函数 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;
}

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

最佳答案

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

但是每个线程都有自己的私有(private)局部变量集。所以线程不会改变其他线程使用的变量(如果变量是函数的本地变量)。现在,如果变量是全局的,那么所有的赌注都没有了。

将其更改为使用类将完全没有影响。函数局部变量(和对象局部变量)不会在线程之间共享。但是全局变量仍然会被共享。

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

关于c++ - C++ 类是否解决了函数覆盖问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47211907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com