c++ - 多线程写入C++中共享对象的不同变量是否可以

标签 c++ multithreading

所以这个共享对象是这样的(只是为了演示,不是工作的):

class Shared{
int var1;
int var2;

public:
    void setter1(int var){
        var1=var;
    }

    void setter2(int var){
        var2=var;
    }

}

并且 thread1 可以执行 shared->setter1(3)thread2 可以执行 shared->setter2(2) 同时没有任何竞争条件或问题?

最佳答案

是的,您可以在两个独立的线程中访问 Shared 对象的各个子对象而无需同步,这不会成为竞争条件。 cppreference上给出了外行的解释,这里是部分引用:

Different threads of execution are always allowed to access (read and modify) different memory locations concurrently, with no interference and no synchronization requirements.

但是,请注意 false sharing !您的代码似乎很容易出现这种情况。

关于c++ - 多线程写入C++中共享对象的不同变量是否可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068460/

相关文章:

java - 当我更改文本并将其显示在线程中的 UI 上时,什么也没做(JAVA)

c++ - PyQt 与 PySide 比较

c++ - 寻找最快的可能路径

c++ - 在 C++ 中共享相同名称的类和命名空间

c++ - Qt5.4.1升级到5.12.1,现在QCodec报异常

multithreading - 在 Node 模块中使用集群

java - Java 日历操作的结果不一致

java - 同步中的等待和通知方法?

c++ - 不明确的类型引用

c# - C#有没有多处理的概念(除了多线程)?