多线程和oop

Multithreading and oop

本文关键字:oop 多线程      更新时间:2023-10-16

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

类似于:

extern Obj1 *obj1;

在我看来:

  1. 在不同线程中调用一组obj1
  2. 在不同线程中设置obj1的值
  3. 大量使用全局布尔变量,如信号量

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

规则很简单:如果任何线程修改对象(包括"对象"(如双精度或指针),以及多个线程访问它,则所有访问都必须受到保护。这是定义在C++11标准中,该标准基本上重述了适用于Posix的规则(据我所知Windows)。

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