我目前使用Managed Binary Analysis,看起来nuget添加了相同的规则(可能更少).
我也使用这个SonarQube插件:https://github.com/SonarQubeCommunity/sonar-fxcop.
准确的是什么?
在多线程环境中,锁定对线程敏感的资源很重要。我经常假设集合等是线程不安全的,具体取决于 MS 文档,但简单类型是否也是线程敏感的?
让我们举个例子。锁定 int 属性访问是否有用,例如
public int SomeProperty
{
get
{
lock (_lock)
{
return _value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者是一个足够普通的吸气剂,即
public int SomeProperty => _value;
Run Code Online (Sandbox Code Playgroud)
据我了解,一个简单的字段读取是线程安全的,但我仍然在网上和一些代码库中看到第一个例子。
第二个问题,单行指令中的值是顺序读取还是同时读取?换句话说,我这样做时是否需要锁定
public TimeSpan GetSomeExampleValue()
{
lock (_lock)
{
return _dateTime1 - _dateTime2;
}
}
Run Code Online (Sandbox Code Playgroud)
或者我可以简单地做
public TimeSpan GetSomeExampleValue()
{
return _dateTime1 - _dateTime2;
}
Run Code Online (Sandbox Code Playgroud) c# multithreading locking thread-safety thread-synchronization