可以互锁.交换交换两个字节[]数组

本文关键字:交换 字节 两个 数组 | 更新日期: 2023-09-27 17:55:28

我想以原子方式交换两个字节数组,而无需一把锁。即我不想

    byte[] src;
    byte[] dest;
    lock(synchLock)
    {
       dest = src;
    }

这可以通过互锁交换吗?我看到它适用于文档中的 int 数组。

谢谢!

可以互锁.交换交换两个字节[]数组

交换数组引用还是交换它们的元素?参考文献 - 是的,元素 - 否。没有适用于数组的原子命令。

不清楚你在问什么,但InterlockedExchange原子地执行以下操作:

  1. 读取变量的预先存在的值
  2. 写入变量

请注意,操作中仅涉及一个变量,以及两个临时变量(正在写入的值和返回的前一个值)。 而"交换"通常意味着编写两个变量,使得每个变量都具有另一个变量中预先存在的值。 那将是:

byte[] src;
byte[] dest;
lock(synchLock)
{
   var temp = dest;
   dest = src;
   src = temp;
}

InterlockedExchange不能用于实现对两个变量都具有原子效应的无锁交换。

是的

Interlocked.Exchange支持所有引用类型和一些选定的值类型(Int32/64/Ptr、单、双)。