5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Lockクラス(.NET 9)

Posted at

参考

この記事は、以下の動画を参考にしています。
詳しくは、動画をご覧ください。

また、以下の記事も参考になります。

リファレンス

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();
        }
    }
}
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?