Interlocked.Exchange 可以交换两个 byte[] 数组吗?

发布于 2024-11-06 02:18:19 字数 226 浏览 0 评论 0原文

我想原子地交换两个字节数组,而不需要 一把锁。即我不想

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

       dest = src;
    }

要这样做 Interlocked.Exchange 可以吗?我在文档中看到它适用于 int 数组。

谢谢!

I want to swap two byte arrays atomically, without the need for
a lock. i.e. I don't want to do

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

       dest = src;
    }

Is this possible with Interlocked.Exchange ? I see it works for int arrays in docs.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

合约呢 2024-11-13 02:18:19

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

Swap array references or swap their elements? References - yes, elements - no. There's no atomic command that works with arrays.

抚笙 2024-11-13 02:18:19

目前尚不清楚您在问什么,但是 InterlockedExchange 自动执行以下操作:

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

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

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

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

It's not clear what you're asking, but InterlockedExchange atomically does the following:

  1. reads the pre-existing value of the variable
  2. writes the variable

Note that only one variable is involved in the operation, along with two temporaries (the value being written, and the prior value returned). Whereas "swap" usually means writing two variables, such that each has the value which pre-existed in the other. That would be:

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

InterlockedExchange cannot be used to implement lock-less swap with atomic effect on both variables.

心房敞 2024-11-13 02:18:19

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

Yes, Interlocked.Exchange supports all reference types and a few selected value types (Int32/64/Ptr, Single, Double).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文