C# 中字符串读/写操作的原子性

A.T*_*.T. 2 c# string

当我们从堆中读取字符串时,该操作是原子读/写操作吗?

我在这里很困惑,如果我有像这样的字符串,Hello World那么这个字符串的大小是 11 * 2 = 22 字节,所以当编译器(86x/64x)读取这个字符串时,它根本无法在一个操作中读取字符串,所以它不是原子操作。

或者以另一种方式将字符串读取为字符数组,并且字符的每个读/写操作都是原子的。这是否意味着对字符串的读/写操作是原子的。

Mat*_*son 6

将字符串引用分配给另一个引用一个原子操作,因为只分配了一个指针。

例如:

string x = "Hello";
string y = x; // This is an atomic operation: Reference assignment.
Run Code Online (Sandbox Code Playgroud)

但是,正如您所指出的,将字符串的内容复制到某处(例如,在进行 P/Invoke 调用时)不是原子操作。

请注意,由于字符串是不可变的,因此在托管代码中不会出现与更改字符串相关的多线程问题。