我对C++多线程很陌生(显然它不同于python多线程/多线程处理,因为多个线程可以在单个进程中使用多个CPU)。我知道,如果两个线程同时尝试更改相同的数据,或者一个线程在另一个线程进行更改时读取某些数据,则会出现争用条件,但我不确定以下情况是否需要同步:
假设我有以下课程:
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);
}是否安全:
。
// thread 1
a->name = "Bar";
// thread 2
Dog* d = static_cast<Dog*>(a);带来问题。
谢谢
发布于 2020-08-26 22:26:25
别去那儿。
如果只有一个线程写入/读取数据,那么它就不是定义上的共享数据,也不需要是全局的。
如果有一个线程写入的数据,并最终被另一个线程读取,请使用锁、std::atomic或其他同步--使用关系,并将其称为一天。
static_cast、dynamic_cast和取消引用都是读的。
但底线是,在现代C++中,您必须使用带有关系的同步,或者显式地告诉编译器某些数据是通过std::atomic共享的。在任何多线程程序中,即使在玩具示例中,都会有一个线程读取另一个线程所写的内容。此时,需要同步。
https://stackoverflow.com/questions/63601509
复制相似问题