【问题标题】:Do we need to synchronize local object variable in C++?我们需要在 C++ 中同步本地对象变量吗?
【发布时间】:2016-06-10 05:19:57
【问题描述】:

我有一个在多线程环境中调用的函数。它有一个本地创建的对象。我们需要同步本地对象变量吗?

例如

void myFun() {

  SomeClass obj = SomeClass();

  // This object is then passed to some other method.

}

我们是否需要在上面本地创建的对象(即 obj)上获得互斥锁?使其在多线程环境中正常工作。

}

【问题讨论】:

  • 在堆栈上创建的对象(即本地创建的对象)不需要锁定。每个调用该函数的线程都将拥有自己单独的对象副本。
  • 对象是全局的还是本地的都没有关系。重要的是,如果您从不同的线程访问一个对象,并且这些访问中至少有一些可以修改该对象,那么您必须同步它们。

标签: c++ multithreading mutex


【解决方案1】:

对象是在当前线程的栈上创建的。除非您将指针或对它的引用存储在其他地方,否则其他线程甚至无法看到它。

【讨论】:

  • 这也取决于对象是否访问某些共享资源。但是我想在多线程环境中表现是对象的责任,即线程安全。
  • @EJP 感谢您的回答,我在 HEAP 上创建的对象是什么?即简单 *sPtr = new Simple()。这种情况我们也不需要同步吗?
  • @ProAccount 当然不是。如果您传递指针,多个线程可以看到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
相关资源
最近更新 更多