gpt4 book ai didi

C#:将数组分配给另一个数组:复制还是指针交换?

转载 作者:太空狗 更新时间:2023-10-29 17:30:27 24 4
gpt4 key购买 nike

很抱歉问这个问题,我在谷歌上搜索了一下,但似乎出现的是对克隆或复制方法的引用,而不是我在 C# 中的问题的实际答案。

我有两个字节数组,它们被两个线程访问。

private byte[] buffer1 = new byte[size];
private byte[] buffer2 = new byte[size];

我的目标是在 Thread1 中写入 buffer1,获取互斥锁,切换指针并重复该过程。 Thread2 会获取一个互斥量并始终读取 buffer2

目标是 Thread2 运行得很快,并且不受 Thread1 中发生的复制的影响。

我很不清楚当我执行以下操作时会发生什么:

byte[] temp = buffer1;
buffer1 = buffer2;
buffer2 = temp;

是指针被切换还是 buffer2 的内容被复制到 buffer1?这应该是一个简单的问题,但我似乎无法找到解决方案。 Thread1 正在执行 Marshal.Copy(),我不希望调用影响 Thread2

最佳答案

赋值总是只是将一个表达式的值复制到一个变量中(或调用属性/索引器 setter )。

在你的情况下,用这个:

buffer1 = buffer2;

...buffer2 的值只是对字节数组的引用。因此,在该赋值之后(假设没有其他赋值),“通过”一个变量对字节数组所做的更改将“通过”另一个变量可见。

这不是特定于数组类型的——这是引用类型在整个 .NET 中的工作方式:

StringBuilder x = new StringBuilder();
StringBuilder y = x;
x.Append("Foo");
Console.WriteLine(y); // Foo

只是理解数组始终是引用类型的问题。

关于C#:将数组分配给另一个数组:复制还是指针交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29398848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com