我是 C++ 多线程的新手(显然它与 python 多线程/多处理不同,因为多个线程可以在单个进程中使用多个 CPU)。我知道如果 2 个线程尝试同时更改相同的数据,或者如果一个线程读取某些内容而另一个线程正在更改它,则会发生竞争条件,但我不确定以下情况是否需要同步:
假设我有以下课程:
class Animal{
public:
string name_;
Animal(string name);
~Animal();
};
class Dog : public Animal{
public:
int price_;
Dog(string name, int price);
~Dog();
};
class Cat : public Animal{
public:
int price_;
Cat(string name, int price);
~Cat();
};
void do_stuff(){
Animal* a = new Dog("Foo", 3);
}
是否安全:
- 有一个线程执行 static_cast 或 dynamic_cast 而另一个线程正在读取或写入对象?
// thread 1
a->name = "Bar";
// thread 2
Dog* d = static_cast<Dog*>(a);
- 有一个线程读取对象的属性,而另一个线程正在写入同一对象的另一个属性?根据这篇文章(从 C++ 中的 2 个不同线程访问属于同一对象的不同数据成员)似乎没问题,但显然它会导致缓存问题?
谢谢