Skip to main content
Source: Al0057ToAl0060ThreadingAnalyzer.cs

Description

Interned strings are shared across the entire AppDomain. Locking on a string literal can deadlock with unrelated code.

Bad Code

public void Update()
{
    lock ("myLock") { _count++; }
}

Good Code

private readonly Lock _syncRoot = new();
public void Update()
{
    lock (_syncRoot) { _count++; }
}

Properties

  • Category: Threading
  • Severity: Warning
  • Enabled by default: True
  • Code fix available: False

Configuration

dotnet_diagnostic.AL0060.severity = warning