Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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#_.net_Bit Manipulation_.net 5_Interlocked - Fatal编程技术网

有没有办法对C#中的两个字节执行原子(读更新写)或操作?

有没有办法对C#中的两个字节执行原子(读更新写)或操作?,c#,.net,bit-manipulation,.net-5,interlocked,C#,.net,Bit Manipulation,.net 5,Interlocked,我查看了.NET5中的方法。这对于两个整数值非常有用。有没有一种方法可以对两个单独的字节值执行等效的操作 我搜索了文档,发现它存在于winnt.h中,但是p/调用它不会产生良好的性能特征 我尝试调用Interlocked。将Exchange进行如下比较,看看是否可以使用一些字节值简单地调用它: var map = new byte[268435456]; Interlocked.CompareExchange(ref map[0], (byte)137, (byte)137); 但我得到了以下

我查看了.NET5中的方法。这对于两个整数值非常有用。有没有一种方法可以对两个单独的字节值执行等效的操作

我搜索了文档,发现它存在于
winnt.h
中,但是p/调用它不会产生良好的性能特征

我尝试调用Interlocked
。将Exchange
进行如下比较,看看是否可以使用一些字节值简单地调用它:

var map = new byte[268435456];
Interlocked.CompareExchange(ref map[0], (byte)137, (byte)137);
但我得到了以下错误:

错误CS0452类型“byte”必须是引用类型才能使用 它将作为泛型类型或方法中的参数“T”进行设置 '联锁。比较交换(参考T,T,T)'


这是Interlocked的源代码。或者:(或者)我将添加
Interlocked。CompareExchange
基本上编译为CPU指令。它通常被称为a(比较和交换),不知道为什么C#将其命名为不同的。在x86之前,它已经被硬件处理了很长一段时间。“我可以看到InterlockedOr8存在于winnt.h中。是否有一种从C#调用它的方法?”--当然,但可能不会同时保留您所寻找的性能方面。我建议您缩小问题的焦点。这里至少有三个不同的问题。确定您真正需要答案的问题,然后编辑该问题,使其仅包含该问题,以及您迄今为止试图解决该问题的详细信息。一种解决方法是将一个字节存储在受支持的CAS类型中,并将其余字节作为垃圾忽略。问题是,这不适用于字节数组,这使得它非常无用。浪费记忆。一个字节?当然,把它塞进支持的东西里。