当我们从堆读取字符串时,该操作是否是原子读/写操作?
我在这里很困惑,如果我有像Hello World
这样的字符串,那么这个字符串的大小是11 * 2 = 22字节,所以当编译器(86x / 64x)读取这个字符串时,它根本无法在一个操作中读取字符串所以它不是原子操作。
或者换句话说,字符串作为字符数组读取,字符的每个读/写操作都是原子的。那么这意味着对字符串的读/写操作是原子的。
答案 0 :(得分:3)
将字符串引用分配给另一个引用 是一个原子操作,因为只分配了一个指针。
例如:
string x = "Hello";
string y = x; // This is an atomic operation: Reference assignment.
但是,正如您所指出的那样,在某处复制字符串的内容(例如,在进行P / Invoke调用时)不是原子操作。
请注意,因为字符串是不可变的,所以在托管代码中不会出现与它们相关的多线程问题。