我刚接触C++中的多线程,并且试图清楚地了解线程之间内存如何共享/不共享。我正在使用C++11的std::thread
。
根据我在其他SO问题上阅读到的信息,堆栈内存只属于一个线程,而堆内存是在线程之间共享的。因此,从我对堆栈和堆的理解来看,以下应该是正确的:
#include <thread>
using namespace std;
class Obj {
public:
int x;
Obj(){x = 0;}
};
int main() {
Obj stackObj;
Obj *heapObj = new Obj();
thread t([&]{
stackObj.x++;
heapObj->x++;
});
t.join();
assert(heapObj->x == 1);
assert(stackObj.x == 0);
}
如果我搞砸了很多东西,请原谅,lambda语法对我来说非常新。但是希望我尝试做的事情是连贯的。 这样会按照我的预期执行吗?如果不是,我有什么误解吗?
[&]
,所有变量都是按引用传递的,因此两个计数器都将为1。如果您使用了[=]
,则会成功断言。 - Dark Falcon