Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中字符串读写操作的原子性#_C#_String - Fatal编程技术网

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

C# c中字符串读写操作的原子性#,c#,string,C#,String,当我们从堆中读取字符串时,该操作是原子读/写操作吗 我在这里感到困惑,若我有像Hello World这样的字符串,那个么这个字符串的大小是11*2=22字节,所以当编译器(86x/64x)读取这个字符串时,它不能在一个操作中读取字符串,所以它不是原子操作 或者在另一种方式中,字符串被读取为字符数组,字符的每个读/写操作都是原子的。这是否意味着对字符串的读/写操作是原子操作。将一个字符串引用分配给另一个引用是原子操作,因为只分配了一个指针 例如: string x = "Hello"; strin

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

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


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

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

例如:

string x = "Hello";
string y = x; // This is an atomic operation: Reference assignment.
但是,正如您所指出的,将字符串的内容复制到某处(例如,在进行p/Invoke调用时)不是一个原子操作


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

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

例如:

string x = "Hello";
string y = x; // This is an atomic operation: Reference assignment.
但是,正如您所指出的,将字符串的内容复制到某处(例如,在进行p/Invoke调用时)不是一个原子操作


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

也许您应该给出和示例(字符在.net中是两个字节),在这里给出示例很困难也许您应该给出和示例(字符在.net中是两个字节)这里很难给出示例