Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一些VisualStudio扩展,用于检查代码中潜在的线程不安全性?_C#_Visual Studio_Resharper - Fatal编程技术网

C# 是否有一些VisualStudio扩展,用于检查代码中潜在的线程不安全性?

C# 是否有一些VisualStudio扩展,用于检查代码中潜在的线程不安全性?,c#,visual-studio,resharper,C#,Visual Studio,Resharper,是否有一些VisualStudio扩展,用于检查代码中潜在的线程不安全性并标记这段代码?也许ReSharper有这个功能?我知道有两个R#检查 用于锁定-语句 public class SometimesNotSynchronizedWarning { private readonly List<string> _list = new List<string>(); private readonly object _lockObj = new object

是否有一些VisualStudio扩展,用于检查代码中潜在的线程不安全性并标记这段代码?也许ReSharper有这个功能?

我知道有两个R#检查

用于
锁定
-语句

public class SometimesNotSynchronizedWarning
{
    private readonly List<string> _list = new List<string>();
    private readonly object _lockObj = new object();

    public bool Contains(string item)
    {
        lock (_lockObj)
        {
            return _list.Contains(item);
        }
    }

    public void Add(string item)
    {
        // R# warning: "The field is sometimes used inside synchronized block
        // and sometimes used without synchronization":
        _list.Add(item);
    }
}
public class DoubleCheckedLockingWarning
{
    private List<string> _instance;
    private readonly object _lockObj = new object();

    public List<string> GetInstance()
    {
        if (_instance != null) return _instance;

        lock (_lockObj)
            if (_instance == null)
                // R# warning: "Possible incorrect implementation of Double-Check Locking.
                // Checked field must be volatile or assigned from local variable
                // after 'Thread.MemoryBarrier()' call":
                _instance = new List<string>(); 

        return _instance;
    }
}
public类有时不同步警告
{
私有只读列表_List=new List();
私有只读对象_lockObj=新对象();
公共布尔包含(字符串项)
{
锁
{
退货清单包含(项目);
}
}
公共无效添加(字符串项)
{
//R#警告:“该字段有时在同步块内使用
//有时在没有同步的情况下使用”:
_列表。添加(项目);
}
}
用于双重检查锁定实施

public class SometimesNotSynchronizedWarning
{
    private readonly List<string> _list = new List<string>();
    private readonly object _lockObj = new object();

    public bool Contains(string item)
    {
        lock (_lockObj)
        {
            return _list.Contains(item);
        }
    }

    public void Add(string item)
    {
        // R# warning: "The field is sometimes used inside synchronized block
        // and sometimes used without synchronization":
        _list.Add(item);
    }
}
public class DoubleCheckedLockingWarning
{
    private List<string> _instance;
    private readonly object _lockObj = new object();

    public List<string> GetInstance()
    {
        if (_instance != null) return _instance;

        lock (_lockObj)
            if (_instance == null)
                // R# warning: "Possible incorrect implementation of Double-Check Locking.
                // Checked field must be volatile or assigned from local variable
                // after 'Thread.MemoryBarrier()' call":
                _instance = new List<string>(); 

        return _instance;
    }
}
公共类双重检查锁定警告
{
私有列表实例;
私有只读对象_lockObj=新对象();
公共列表GetInstance()
{
if(_instance!=null)返回_instance;
锁
if(_instance==null)
//R#警告:“可能不正确地执行双重检查锁定。
//选中字段必须是可变的或从局部变量赋值
//在“Thread.MemoryBarrier()”调用之后:
_实例=新列表();
返回_实例;
}
}