C++类是否解决函数覆盖问题
Do C++ classes solve function overwriting?
所以我有两个线程正在运行,每个线程调用相同的函数。我要么遇到了比赛情况,要么值在函数 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;
}
如果我说得不够清楚,请告诉我。
两个线程将运行相同的代码(代码是共享的(。
但是每个线程都有自己的私有局部变量集。因此,线程不会更改其他线程使用的变量(如果变量是函数的局部变量(。现在,如果变量是全局的,那么所有的赌注都关闭了。
将其更改为使用类绝对不会产生任何影响。函数的本地变量(和对象的本地变量(将不会在线程之间共享。但全局变量仍将共享。
还有第三种类型的变量(本地(自动存储持续时间(、全局(静态存储持续时间(除外(。第三种类型是线程本地(线程存储持续时间(。这些类似于全局变量(它们不是函数或对象的局部变量(,但每个线程都有自己的变量副本(因此它们不像全局变量那样交互(,但它们不是函数或对象的局部变量。
相关文章:
- 覆盖应用程序的低级别键盘挂钩问题
- 关于继承和覆盖的问题
- C++自动内存 malloc 和免费覆盖问题
- Arduino:覆盖打印类问题
- C++类是否解决函数覆盖问题
- 如果私有虚拟函数被覆盖为派生类中的公共函数,那么问题是什么
- C++中的第一个覆盖前缀-我的代码出了什么问题
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- C 的多态性问题 - 数据覆盖
- LCOV 问题:奇怪的重复构造函数标记为未覆盖和函数未标记为已覆盖,即使它的行已被执行
- gcovr-在xml覆盖Cobertura报告中是否存在损坏文件名的已知问题
- 覆盖派生类的函数时遇到问题
- 与覆盖全局新建和删除运算符有关的问题
- 覆盖运算符 =,以便我们可以使用 = 复制类实例,而不会有浅层复制问题
- 模板嵌套类的构造函数问题(复制 ctor 似乎覆盖了其他 ctor)
- 在将MongoDB查询覆盖到C++查询时遇到问题
- 覆盖使用模板参数包扩展声明的虚拟方法时遇到问题
- 提振.测试-问题覆盖主程序
- R / c++中集合覆盖问题的变体
- 一个c++协方差/覆盖/循环问题