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

时间:2014-01-31 09:54:59

标签: c# string

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

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

或者换句话说,字符串作为字符数组读取,字符的每个读/写操作都是原子的。那么这意味着对字符串的读/写操作是原子的。

1 个答案:

答案 0 :(得分:3)

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

例如:

string x = "Hello";
string y = x; // This is an atomic operation: Reference assignment.

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

请注意,因为字符串是不可变的,所以在托管代码中不会出现与它们相关的多线程问题。