C#のMutexクラスとは?同期プリミティブの基本と使い方を解説
C#のMutex(ミューテックス)クラスは、複数のスレッドが同時に共有リソースへアクセスすることを防ぐための同期プリミティブです。単一プロセス内のスレッド同期だけでなく、プロセス間同期にも利用できる点が大きな特徴となっています。
Mutexオブジェクトの作成方法
まずは、新しいMutexインスタンスを作成する最も基本的な方法を見てみましょう。
private static Mutex m = new Mutex();
ブール値を指定して初期化する
次に、所有権の初期状態を表すブール値を引数に渡して、Mutexクラスの新しいインスタンスを初期化する方法です。trueを指定すると、呼び出し元のスレッドが最初にミューテックスを所有した状態になります。
private static Mutex m = new Mutex(true);
ブール値と名前を指定して初期化する
さらに、ブール値に加えてミューテックスの名前を指定して初期化することも可能です。名前付きミューテックスはシステム全体で認識されるため、異なるプロセス間での同期を実現したい場合に特に有効です。
サンプルコード
以下は、名前付きミューテックスを作成し、所有権の取得・解放を行うサンプルプログラムです。
using System;
using System.Threading;
public class Demo {
public static void Main() {
Mutex mt = new Mutex(false, "NewMutex");
Console.WriteLine("Waiting for the Mutex.");
mt.WaitOne();
Console.WriteLine("Owner of the mutex. ENTER is to be pressed to release the mutex and exit.");
Console.ReadLine();
mt.ReleaseMutex();
}
}
実行結果
Waiting for the Mutex. Owner of the mutex. ENTER is to be pressed to release the mutex and exit.
主なメソッドのポイント
- WaitOne():ミューテックスの所有権を要求します。他のスレッドが所有している場合は、解放されるまで待機します。
- ReleaseMutex():現在のスレッドが保持しているミューテックスの所有権を解放します。
このようにMutexクラスを使うことで、競合状態(レースコンディション)を防ぎ、安全なマルチスレッド処理やプロセス間連携を実現できます。
-
C#のBitArrayクラスでCountプロパティを使って要素数を取得する方法
C#のBitArrayクラスにおけるCountプロパティとは?C#のBitArrayクラスは、ビット値(true/false)のコレクションを管理するためのクラスです。このクラスには、Countプロパティが用意されており、これを使うことでBitArrayに含まれる要素(ビット)の総数を簡単に取得できます。なお、BitArrayクラスのCountプロパティは、Lengthプロパティと同じ値を返します。どちらを使用しても要素数は同じになります。BitArrayクラスのインスタンスを作成するまずは、BitArrayクラスのインスタンスを作成しましょう。以下の例では、10個の要素を持つBitArray
-
C#のSortedListクラスのCapacityプロパティとは?意味と使い方を解説
C#のSortedListクラスにおけるCapacityプロパティとはSortedListクラスのCapacity(容量)プロパティは、SortedListが保持できる要素数の最大サイズを示すプロパティです。つまり、内部的に確保されている配列が格納できる要素の総数を表しています。なお、SortedListの既定の容量(デフォルト値)は16に設定されています。要素を追加していき容量を超えると、容量は自動的に拡張される仕組みになっています。以下のコードを実行すると、C#でSortedListクラスのCapacityプロパティを実際に確認できます。コード例using System; using Sy