在 lock 语句中锁定“this”对象¶
ID: cs/lock-this
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- reliability
- maintainability
- modularity
- external/cwe/cwe-662
Query suites:
- csharp-security-and-quality.qls
不建议在 lock
语句中使用 this
,因为其他类也可能尝试锁定该对象,从而导致效率低下或死锁。
建议¶
创建一个 private readonly Object
,专门用于锁定。这可以确保没有其他类可以使用同一个锁。
示例¶
以下示例使用名为 mutex
的 private readonly
变量在 lock
语句中使用。
class ThreadSafe
{
private readonly Object mutex = new Object();
int value = 0;
public void Inc()
{
lock (mutex) // Correct
{
++value;
}
}
}