抱歉问这个问题,我一直在谷歌上搜索了一下,但似乎出现的是对克隆或复制方法的引用,而不是我的问题的实际答案C#
.
我有两个字节数组,它们正在被两个线程访问。
private byte[] buffer1 = new byte[size];
private byte[] buffer2 = new byte[size];
我的目标是写在buffer1
in Thread1
,获取一个互斥体,切换指针并重复该过程。Thread2
会获取一个互斥体并始终读取buffer2
.
目标是Thread2
运行速度快并且不受复制发生的影响Thread1
.
我非常不清楚当我执行以下操作时会发生什么:
byte[] temp = buffer1;
buffer1 = buffer2;
buffer2 = temp;
指针是否被切换或者是内容buffer2
被复制到buffer1
?这应该是一个简单的问题,但我似乎找不到解决方案。Thread1
正在做一个Marshal.Copy()
,我不希望这个电话影响Thread2
.
赋值始终只是将一个表达式的值复制到变量中(或调用属性/索引器设置器)。
在你的情况下,这样:
buffer1 = buffer2;
... 的价值buffer2
只是一个参考到一个字节数组。因此,在该分配之后(假设没有其他分配),“通过”一个变量对字节数组所做的更改将“通过”另一个变量可见。
这并非特定于数组类型 - 这是引用类型在 .NET 中的工作方式:
StringBuilder x = new StringBuilder();
StringBuilder y = x;
x.Append("Foo");
Console.WriteLine(y); // Foo
只需要理解数组始终是引用类型即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)