0

我正在开发一个使用 2 个不同线程(th1th2)的项目。extern它们通过关键字共享多个对象和变量。它们是全局对象和全局变量

就像是:

extern Obj1 *obj1;

在我看来,这:

  1. 在不同的线程中调用 obj1 的方法;
  2. 在不同的线程中设置 obj1 的值;
  3. 大量使用信号量等全局布尔变量;

不是一种安全的编程方式,但我想有一些参考来证明它,比如一些不鼓励它的论文或书籍。谁能澄清一下?我假设 x86 平台正在与 Visual Studio C++ 一起使用。

4

1 回答 1

2

规则很简单:如果任何线程修改了一个对象(包括像双精度或指针这样的“对象”),并且有多个线程访问它,那么所有访问都必须受到保护。这是在 C++11 标准中定义的,它基本上重申了在 Posix 下应用的规则(据我所知,在 Windows 下也是如此)。

除此之外,什么是安全的取决于你在做什么。例如,在我自己的代码中,我发现很少需要非常量全局对象。日志记录是唯一的例外(即使在那里,大多数对象将是线程本地的,当日志消息实际刷新到其最终目的地时使用唯一的共享对象)。大多数对象是本地对象,或者是动态分配的,并且很少在线程之间共享。

于 2013-08-28T09:38:44.413 回答