我想原子地交换两个字节数组,而不需要锁。即我不想做
byte[] src;
byte[] dest;
lock(synchLock)
{
dest = src;
}
这可能与 Interlocked.Exchange 吗?我看到它适用于文档中的 int 数组。
谢谢!
我想原子地交换两个字节数组,而不需要锁。即我不想做
byte[] src;
byte[] dest;
lock(synchLock)
{
dest = src;
}
这可能与 Interlocked.Exchange 吗?我看到它适用于文档中的 int 数组。
谢谢!
交换数组引用或交换它们的元素?参考 - 是的,元素 - 不。没有适用于数组的原子命令。
是的,Interlocked.Exchange
支持所有引用类型和一些选定的值类型(Int32/64/Ptr、Single、Double)。
目前尚不清楚您在问什么,但InterlockedExchange
原子地执行以下操作:
请注意,操作中只涉及一个变量,以及两个临时变量(写入的值和返回的先前值)。而“交换”通常意味着编写两个变量,这样每个变量都具有另一个预先存在的值。那将是:
byte[] src;
byte[] dest;
lock(synchLock)
{
var temp = dest;
dest = src;
src = temp;
}
InterlockedExchange
不能用于实现对两个变量具有原子效应的无锁交换。