相关疑难解决方法(0)

易失性与易失性读/写?

我找不到任何 VolatileRead/write(尝试...)的例子,但仍然:

何时应该使用volatilevs VolatileRead

AFAIK的全部目的volatile是创造围栏所以:

  • 对于READ操作,在当前操作之后进行的读/写(在其他线程上)将不会在栅栏之前传递.因此 - 我们读了最新的价值.

问题#1

那我为什么需要volatileRead?似乎volatile已经做好了工作.

另外 - 在C#中,所有写入都是易失性的(与Java中不同),无论您是写入volatile还是非易失性字段 - 所以我问:为什么我需要 volatileWrite

问题2

这是实施VolatileRead:

[MethodImpl(MethodImplOptions.NoInlining)]
public static int VolatileRead(ref int address)
{
    int num = address;
    MemoryBarrier();
    return num;
}
Run Code Online (Sandbox Code Playgroud)

为什么这条线路int num = address;在那里?他们已经有了明确保持价值的地址参数.

c# multithreading volatile .net-4.0

29
推荐指数
2
解决办法
6120
查看次数

C#:volatile读写HashSet

我有一节课:

public class Checker
{
    private HashSet<int> _hs = new HashSet<int>();

    public bool Check(int a)
    {
        return Volatile.Read(ref _hs).Contains(a);
    }

    public void Update(IEnumerable<int> items)
    {
        Volatile.Write(ref _hs, new HashSet<int>(items));
    }
}
Run Code Online (Sandbox Code Playgroud)

Check经常从多个线程调用方法.Update从单个线程调用方法,该线程监视某些源(数据库,http服务等).这种Volatile.Read / Volatile.Write用法是否正确?

.net c# multithreading volatile

5
推荐指数
1
解决办法
118
查看次数

标签 统计

c# ×2

multithreading ×2

volatile ×2

.net ×1

.net-4.0 ×1