C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のArray.IsSynchronizedプロパティとは?配列アクセスの同期状態を確認する方法

C#におけるArray.IsSynchronizedプロパティは、配列(Array)へのアクセスが同期されている(スレッドセーフである)かどうかを示すbool型の値を取得します。

このプロパティは、System.Collections.ICollectionインターフェースで要求されているため、Arrayクラスに実装されています。ただし、配列自体は本質的にスレッドセーフではないため、実際には常にfalseを返す点に注意が必要です。配列を使用するクラスでは、SyncRootプロパティを利用して独自の同期処理を実装することができます。

構文

public bool IsSynchronized { get; }

Array.IsSynchronizedプロパティの実装は、SyncRootプロパティと同様の仕組みになっています。以下のコード例では、lockステートメントとSyncRootプロパティを組み合わせることで、複数スレッドからの同時アクセスに対して配列の操作を保護しています。

コード例

using System;
using System.Collections.Generic;
using System.Linq;

class Program {
    static void Main() {
        Array arr = new int[] { 2, 1, 9, 4, 8, 6, 8 };
        lock(arr.SyncRoot) {
            foreach (Object val in arr)
                Console.WriteLine(val);
        }
    }
}

実行結果

2
1
9
4
8
6
8

このように、IsSynchronizedプロパティとSyncRootプロパティを活用することで、マルチスレッド環境においても配列への安全なアクセスを実現できます。特にコレクションクラスを独自に実装する際には、ICollectionインターフェースの要件としてこれらのメンバーの実装が求められることを覚えておきましょう。

  1. C#のBitArrayクラスでCountプロパティを使って要素数を取得する方法

    C#のBitArrayクラスにおけるCountプロパティとは?C#のBitArrayクラスは、ビット値(true/false)のコレクションを管理するためのクラスです。このクラスには、Countプロパティが用意されており、これを使うことでBitArrayに含まれる要素(ビット)の総数を簡単に取得できます。なお、BitArrayクラスのCountプロパティは、Lengthプロパティと同じ値を返します。どちらを使用しても要素数は同じになります。BitArrayクラスのインスタンスを作成するまずは、BitArrayクラスのインスタンスを作成しましょう。以下の例では、10個の要素を持つBitArray

  2. C#のSortedListクラスのCapacityプロパティとは?意味と使い方を解説

    C#のSortedListクラスにおけるCapacityプロパティとはSortedListクラスのCapacity(容量)プロパティは、SortedListが保持できる要素数の最大サイズを示すプロパティです。つまり、内部的に確保されている配列が格納できる要素の総数を表しています。なお、SortedListの既定の容量(デフォルト値)は16に設定されています。要素を追加していき容量を超えると、容量は自動的に拡張される仕組みになっています。以下のコードを実行すると、C#でSortedListクラスのCapacityプロパティを実際に確認できます。コード例using System; using Sy