gpt4 book ai didi

c++ - 线程如何访问这个变量

转载 作者:行者123 更新时间:2023-11-28 03:03:36 25 4
gpt4 key购买 nike

我正在使用下面的代码

class foo
{
private:
int val;

public:

void someMethod()
{
std::cout << val ;
}

foo()
{
val = 12;
boost::thread t(&foo::someMethod,this);
}
};

我正在访问这个类:

foo f;

现在据我了解,f 的所有成员变量都是在堆栈上创建的。来自 this thread 我知道线程共享程序的同一个堆,但每个线程都有自己的堆栈空间。我想知道在自己的线程中运行的 someMethod() 如何访问类变量。

最佳答案

您正在将 this 指针传递给线程。指针可以指向任意位置,在这种情况下它将指向堆栈。这在理论上可行,但非常不安全。

考虑以下代码:

if (...) 
{
foo f;
}

会发生什么?

  1. 进入if block 的范围
  2. foo 实例在堆栈上初始化
  3. 线程以指向栈的foo*开始
  4. if block 的作用域是左边的
  5. 因此 f 被破坏/删除,并且包含它的空间(堆栈)可能被释放。

现在虽然线程可能会完美运行几微秒,但在那一小段时间之后你会遇到很大很大的麻烦,因为线程使用的 this 指针现在无效。非常糟糕!

关于c++ - 线程如何访问这个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182733/

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