C# 可以互锁。交换两字节[]数组吗?
我想以原子方式交换两字节数组,而不需要 锁。i、 我不想这样做C# 可以互锁。交换两字节[]数组吗?,c#,arrays,interlocked,C#,Arrays,Interlocked,我想以原子方式交换两字节数组,而不需要 锁。i、 我不想这样做 byte[] src; byte[] dest; lock(synchLock) { dest = src; } 这是否可能与联锁交换?我发现它适用于文档中的int数组 谢谢 交换数组引用还是交换它们的元素?引用-是,元素-否。没有可用于数组的原子命令。是,互锁。Exchange支持所有引用类型和一些选定的值类型(Int32/64/Ptr,Single,Double)。不清楚
byte[] src;
byte[] dest;
lock(synchLock)
{
dest = src;
}
这是否可能与联锁交换?我发现它适用于文档中的int数组
谢谢 交换数组引用还是交换它们的元素?引用-是,元素-否。没有可用于数组的原子命令。是,
互锁。Exchange
支持所有引用类型和一些选定的值类型(Int32/64/Ptr,Single,Double)。不清楚您在问什么,但互锁交换在原子上执行以下操作:
读取变量的预先存在的值
写入变量
请注意,操作中只涉及一个变量以及两个临时变量(正在写入的值和返回的前一个值)。而“交换”通常意味着写两个变量,这样每个变量都有一个先前存在于另一个变量中的值。这将是:
byte[] src;
byte[] dest;
lock(synchLock)
{
var temp = dest;
dest = src;
src = temp;
}
InterlockedExchange
不能用于实现对两个变量都具有原子效应的无锁交换。是的,只需交换引用即可。谢谢,Seva。你也不需要联锁,CLR承诺引用更新是原子的。然而,这并不能保证线程安全。