svb*_*svb 9 c# multithreading thread-safety
在我的应用程序中(用C#编写)我有一个类的实例,其中一个成员变量指向另一个类的实例.第二个实例是只读的,因此该实例的状态在创建后永远不会更改.但在某些情况下,我想用一个新的更新实例替换此实例.在多线程环境中,在第一个实例中替换此引用是否安全?或者这会导致问题吗?
简单的写操作本身就是线程安全的.
所以这是好的:
x.y = new Y(); // OK
Run Code Online (Sandbox Code Playgroud)
但以下不是:
if (x.y == null)
x.y = new Y(); // might overwrite a non-null x.y
Run Code Online (Sandbox Code Playgroud)
所以这取决于你想如何使用它,以及线程的期望.但原子性意味着你永远不会有一个无效的(半写的)引用x.y
是的,在参考读/写是原子的意义上它是"安全的".您的客户端代码将始终获得有效的实例.
显然,您不能保证客户端代码会立即获得新实例.