参考
この記事は、以下の動画を参考にしています。
詳しくは、動画をご覧ください。
また、以下の記事も参考になります。
リファレンス
lock文のためのLockクラス
.NET 8までは、object
のインスタンスを使って、ロックを掛けていました。
// .NET 8まで
class Example
{
// lockをかけるためのインスタンス
private static readonly object _lock = new();
public void Method()
{
lock (_lock)
{
// 複数スレッドが競合する処理
}
}
}
.NET 9では、System.Threading.Lock
クラスのインスタンスを使って、ロックを掛けることができるようになります。
System.Threading.Lock
を使うと、ロックが速くなります。
// .NET 9
class Example
{
// lockをかけるための Lockクラス のインスタンス
private static readonly System.Threading.Lock _lock = new();
public void Method()
{
lock (_lock)
{
// 複数スレッドが競合する処理
}
}
}
lock
文を使わずに、ロックを掛けることも可能です。
// .NET 9
class Example
{
// lockをかけるための Lockクラス のインスタンス
private static readonly System.Threading.Lock _lock = new();
public void Method()
{
using (_lock.EnterScope()) // Lock.Scope構造体を利用
{
// 複数スレッドが競合する処理
}
}
}
// .NET 9
class Example
{
// lockをかけるための Lockクラス のインスタンス
private static readonly System.Threading.Lock _lock = new();
public void Method()
{
_lock.Enter(); // TryEnterもある
try
{
// 複数スレッドが競合する処理
}
finally
{
_lock.Exit();
}
}
}