C#で配列が同期されているかどうかを確認する方法
C#では、IsSynchronizedプロパティを使うことで、配列へのアクセスがスレッドセーフ(同期)されているかどうかを簡単に確認できます。このプロパティは、マルチスレッド環境で配列を安全に扱いたい場合に役立ちます。
サンプルコード1:基本的な確認方法
まずは、空の文字列配列に対して各プロパティを確認する例を見てみましょう。
using System;
public class Demo {
public static void Main() {
string[] products = new string[] { };
Console.WriteLine("One or more planets begin with 'E'? = {0}",
Array.Exists(products, ele => ele.StartsWith("E")));
Console.WriteLine("Is the array having fixed size? = " + products.IsFixedSize);
Console.WriteLine("Is the array read only? = " + products.IsReadOnly);
Console.WriteLine("Is the array synchronized? = " + products.IsSynchronized);
}
}実行結果
One or more planets begin with 'E'? = False Is the array having fixed size? = True Is the array read only? = False Is the array synchronized? = False
この出力から、通常の配列はサイズ固定(IsFixedSize = True)ですが、読み取り専用ではなく、同期もされていないことがわかります。
サンプルコード2:複数の配列を比較する
次に、2つの文字列配列を作成し、それぞれのプロパティを比較してみます。
using System;
public class Demo {
public static void Main() {
String[] strArr1 = new String[3] { "John", "Jacob", "Tim"};
String[] strArr2 = new String[3] { "Tom","Brad","Bradley"};
Console.WriteLine("First String array...");
foreach(string val in strArr1) {
Console.WriteLine(val);
}
Console.WriteLine("Is the 1st array having fixed size? = " + strArr1.IsFixedSize);
Console.WriteLine("Is the 1st array read only? = " + strArr1.IsReadOnly);
Console.WriteLine("Is the 1st array synchronized? = " + strArr1.IsSynchronized);
Console.WriteLine("
Second String array...");
foreach(string val in strArr2) {
Console.WriteLine(val);
}
Console.WriteLine("Is the 2nd array having fixed size? = " + strArr2.IsFixedSize);
Console.WriteLine("Is the 2nd array read only? = " + strArr2.IsReadOnly);
Console.WriteLine("Is the 2nd array synchronized? = " + strArr2.IsSynchronized);
Console.WriteLine("Are both the array objects equal? = "+strArr1.Equals(strArr2));
}
}実行結果
First String array... John Jacob Tim Is the 1st array having fixed size? = True Is the 1st array read only? = False Is the 1st array synchronized? = False Second String array... Tom Brad Bradley Is the 2nd array having fixed size? = True Is the 2nd array read only? = False Is the 2nd array synchronized? = False Are both the array objects equal? = False
ポイントまとめ
- IsSynchronized:配列へのアクセスがスレッドセーフかどうかを示します。通常の配列は常に
Falseを返します。 - IsFixedSize:配列は作成後にサイズ変更できないため、常に
Trueになります。 - IsReadOnly:配列が読み取り専用かどうかを示します。通常の配列は
Falseです。
なお、同期された配列ラッパーが必要な場合は、Array.Synchronized()メソッドを使用することで、スレッドセーフな配列を取得できます。ただし、パフォーマンスへの影響があるため、必要な場合にのみ使用することをおすすめします。
-
C言語で配列が回文かどうかを判定するプログラム
回文とは任意のサイズ n の配列 arr[] が与えられたとき、その配列が回文(パリンドローム)かどうかを判定するのが本記事の目的です。回文とは、前から読んでも後ろから読んでも同じになる並びのことで、MADAM や NAMAN といった文字列が代表的な例として挙げられます。配列が回文かどうかを確認するには、配列を先頭からと末尾から同時に走査し、対応する要素同士を比較していきます。入力例と出力例Input: arr[] = {1, 0, 0, 1} Output: 配列は回文です Input: arr[] = {1, 2, 3, 4, 5} Output: 配列は回文ではありません考え方(アプ
-
C++のSTLを使って配列が回文かどうかを判定するプログラム
整数 n 個からなる配列 arr[n] が与えられたとき、「その配列は回文(パリンドローム)か?」を判定するのが本稿のテーマです。C++ の STL(標準テンプレートライブラリ)を活用して、この問題をシンプルに解いていきます。 STLとは STL(Standard Template Library)は、C++ に用意されたテンプレートクラスの集合体で、スタック・キュー・リストといったデータ構造や、ソート・反転などの便利な関数を提供します。これらを活用するには、テンプレートクラスに関する基本的な知識が必要です。本稿では、STL の reverse() 関数を使って配列を反転させています。 回文と