相关疑难解决方法(0)

.NET Framework中的并发HashSet <T>?

我有以下课程.

class Test{
    public HashSet<string> Data = new HashSet<string>();
}
Run Code Online (Sandbox Code Playgroud)

我需要从不同的线程更改字段"Data",所以我想对我当前的线程安全实现有一些看法.

class Test{
    public HashSet<string> Data = new HashSet<string>();

    public void Add(string Val){
            lock(Data) Data.Add(Val);
    }

    public void Remove(string Val){
            lock(Data) Data.Remove(Val);
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有更好的解决方案,直接进入现场并保护它免受多线程的并发访问?

c# multithreading mutex locking thread-safety

132
推荐指数
3
解决办法
8万
查看次数

了解Volatile.Read/Write

我正在尝试理解C#Volatile类.

正如我读到的:

  • Volatile.Write方法强制将位置中的值写入调用点.此外,任何早期的程序订单加载和存储必须在调用Volatile.Write之前发生.

  • Volatile.Read方法强制在呼叫点读取位置中的值.此外,任何后续的程序订单加载和存储必须在调用Volatile.Read之后发生.

这是否意味着:

internal sealed class ThreadsSharingData {    
    private Int32 m_flag = 0;
    private Int32 m_value = 0;
    // This method is executed by one thread
    public void Thread1() {        
        // Note: 5 must be written to m_value before 1 is written to m_flag
        m_value = 5;
        Volatile.Write(ref m_flag, 1);        
    }

    // This method is executed by another thread
    public void Thread2() {        
        // Note: m_value must be read after m_flag is read
        if …
Run Code Online (Sandbox Code Playgroud)

c# volatile thread-synchronization

12
推荐指数
2
解决办法
3099
查看次数