C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: マルチスレッド


(過去ログ 68 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■39652 / inTopicNo.1)  マルチスレッド
  
□投稿者/ 太陽 (1回)-(2009/08/12(Wed) 09:04:12)

分類:[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)を無効にすると正しい結果は得られなくなることは
確認しました。
汎用的な関数(?)を静的クラスのライブラリとして作り置きしておきたいので
この辺りのことについて教えて頂けないでしょうか?
よろしくお願いいたします。
引用返信 編集キー/
■39653 / inTopicNo.2)  Re[1]: マルチスレッド
□投稿者/ よねKEN (401回)-(2009/08/12(Wed) 09:09:24)
No39652 (太陽 さん) に返信
> このプログラムでは問題なく正しい結果が得られているようなのですが、
> 演算結果のsやループカウンタのiが別スレッドによって破壊されてしまう
> ようなことはないのでしょうか?

ありません。
sもiもローカル変数なので、それらはメソッド呼出しごとに独立しています。

> 静的なクラスはシステムによって自動的にインスタンス化されるため、インスタンス
> は一つしか存在しないと思うのですが...

静的なクラスはインスタンス化されるわけではありません。

引用返信 編集キー/
■39661 / inTopicNo.3)  Re[2]: マルチスレッド
□投稿者/ 太陽 (2回)-(2009/08/12(Wed) 09:44:05)
太陽です。
よねKENさんありがとうございます。

そういえば共にローカル変数なんでスタック上に確保されるのですね
初歩的なことを忘れていました。

ありがとうございました。




解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -