【发布时间】:2018-11-02 02:54:49
【问题描述】:
我正在编写一个游戏引擎(为了好玩),并且有很多线程同时运行。我有一个类,它将另一个类的实例作为私有变量保存,而另一个类的实例又将另一个类的实例保存为私有变量。我的问题是,我应该努力使这些类中的哪一个线程安全?
我是否让它们都成为线程安全的,并让它们中的每一个都使用互斥锁保护他们的数据,我是否只让其中一个成为线程安全的,并假设任何使用我的代码的人都必须明白,如果你使用的是底层类它们本质上不是线程安全的。
例子:
class A {
private:
B b;
}
class B {
private:
C c;
}
class C {
// data
}
我知道我需要每个类的数据来避免因数据竞争而被破坏,但是我想避免在每个类的每个方法上抛出大量互斥锁。我不确定正确的约定是什么。
【问题讨论】:
-
视情况而定。这是一个有用的技术,您可以尝试。 stackoverflow.com/questions/39185420/…
-
感谢@Galik 的回复,我会考虑到这一点,我对使用C++17 有点谨慎,我知道很多人还没有采用这个标准。
-
答案可能不清楚,但代码是
C++14。只是底部的注释是针对C++17用户的。
标签: c++ multithreading oop class-design