|
分類:[C#]
2009/08/12(Wed) 09:06:20 編集(投稿者)
はじめまして、太陽と申します。
.Net2008 C# で開発しています。
マルチスレッドのプログラミングで複数のスレッドからある1つの静的なクラスのメソッドに 対して重複して(?)アクセスできるのでしょうか?
private void xxx() { Thread ThreadA = new Thread(new ThreadStart(ThreadTaskA)); Thread ThreadB = new Thread(new ThreadStart(ThreadTaskB)); ThreadA.Start(); ThreadB.Start(); }
private void ThreadTaskA() { while (true) { int s = Class1.xyz(10); } }
private void ThreadTaskB() { while (true) { int s = Class1.xyz(20); } }
static class Class1 { //private static int s; //<--(1) public static int xyz(int a) { //s = 0; //<--(2) int s = 0; //<--(3) for (int i = 1; i <= a; i ++) { Thread.Sleep(1000); s += i; } return (s); } }
このプログラムでは問題なく正しい結果が得られているようなのですが、 演算結果のsやループカウンタのiが別スレッドによって破壊されてしまう ようなことはないのでしょうか? 静的なクラスはシステムによって自動的にインスタンス化されるため、インスタンス は一つしか存在しないと思うのですが... なお(1),(2)を有効にし(3)を無効にすると正しい結果は得られなくなることは 確認しました。 汎用的な関数(?)を静的クラスのライブラリとして作り置きしておきたいので この辺りのことについて教えて頂けないでしょうか? よろしくお願いいたします。
|