gpt4 book ai didi

c# - 当我准确运行 MemoryBarrier() 时会发生什么?怎么办?

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:58 25 4
gpt4 key购买 nike

根据Web,我找到了如下代码,相当于C# Volatile for VB.NET。

代码引用:How do I specify the equivalent of volatile in VB.net?

Function VolatileRead(Of T)(ByRef Address As T) As T
VolatileRead = Address
Threading.Thread.MemoryBarrier() '*** I mean this line ***'
End Function

Sub VolatileWrite(Of T)(ByRef Address As T, ByVal Value As T)
Threading.Thread.MemoryBarrier() '*** I mean this line ***'
Address = Value
End Sub

我想确切地知道,Threading.Thread.MemoryBarrier() 是什么?当我在上面的代码中执行它时,如何做?

我可以写一个等同于 MemoryBarrier() 的方法吗? 我自己在 C# 中?

最佳答案

Can I write a method equivalent to MemoryBarrier() in C# myself?

是的...通过查看此表http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/

您可以看到,如果您执行 volatile 读取 volatile 写入,您将获得相同的效果。所以:

private volatile static int Useless = 0;

public static void MemoryBarrier()
{
int temp = Useless;
Useless = temp;
}

请注意,在 VB.NET 中, volatile 没有真正的替代品,因为 volatile 字段使用“半”内存屏障,而不是“完整”内存屏障,而该响应中建议的方法使用“完整”内存屏障,因此速度较慢。

从 .NET 4.5 开始,您可以使用 Volatile.Read 在 VB.NET 中模拟它和 Volatile.Write

public static void MemoryBarrier()
{
int useless = 0;
int temp = Volatile.Read(ref useless);
Volatile.Write(ref useless, temp);
}

或在 VB.NET 中:

Public Shared Sub MemoryBarrier()
Dim useless As Integer = 0
Dim value As Integer = Volatile.Read(useless)
Volatile.Write(useless, value)
End Sub

关于c# - 当我准确运行 MemoryBarrier() 时会发生什么?怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30777190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com