研究ではマルチスレッドのC#変数

今日は、ほぼなぜ同じプロセス内の別のスレッドを作成[質問に知って参照してくださいが、各スレッドは、スレッド間で、それぞれ他の変数にアクセスすることはできませんか?]。複数のスレッドでは、各スレッドが独立して実行され、異なるスレッドがコードの同じ部分であってもよいが、それは共有されず、同じスコープではありません。メモリ共有、及び点の余地がない、同じプロセス内で、関係なく、全て同一の仮想メモリ・アドレスを介してアクセスすることができるものスレッド、異なるプロセスは、他の手段のIPCによってメモリデータを共有することができません。グローバル変数:任意のスレッドがアクセスすることができ、ローカル変数(変数スタック):機能にアクセスできない機能外部アクセス可能であるときに実行する任意のスレッド、変数をスレッド:各スレッドが他のスレッドの独自のコピーのみアクセスすることができるが表示されません。異なるスレッド、グローバル変数、ローカル変数、スレッド変数を実装するために、同じコードを持つC#の今日。

プロセスとスレッドを理解します

マルチタスクは何か、短期では、オペレーティングシステムは、複数のタスクを同時に実行することができます。たとえば:再び音楽を聴く、再度、文書を書かれて。次にようなタスク、実行するように、マルチコア、CPUが順次実行され、オペレーティング・システムのCPUは、複数のタスクを実行することができるが、シングルコアCPUは、複数のタスクを実行できます曲が書かれた文書が一度実行、0.01秒の一時停止、一度実行、一時停止、など0.01秒ように。すべてのタスクが同時に実行されるように非常に迅速にCPUの実行速度以来、私たちは感じました。オペレーティング・システム上で、タスクが処理され、プロセスは、少なくとも一つのスレッドを有しています。プロセスがリソース割り当ての最小単位であり、スレッドは、最小単位のCPUスケジューリングです。

普通書かれた手順

プライベート 静的リスト< int型 >データ= Enumerable.Range(11000年).ToList(); 

公共の 静的な 無効SimpleTestの()
{ 
    のためにint型私= 0 ;私は< 10 ; iの++ 
    { 
        リスト < int型 > TempDataを= 新しいリスト< 整数 > ();
        foreachのVARの D データ)
        { 
            tempData.Add(D)。
        } 
        Console.WriteLineを($ "I:{I}、合計:{data.Sum()}に等しい:{data.Sum()== tempData.Sum()} " ); 
    } 

    Console.WriteLineを(" シングルスレッド実行の終わり" ); 
}

マルチスレッドの言葉遣い

プライベート 静的リスト< int型 >データ= Enumerable.Range(11000年).ToList(); 

パブリック 静的 非同期タスクMoreTaskTestAsync()
{ 
    リスト <タスク>タスク= 新しいリスト<タスク> ();
    以下のためにint型 i = 0 ; iは< 10 ; I ++ 
    { 
        VARのテンポ= I。
        VARトン= Task.Run(()=> 
        { 
            一覧 < 整数 > TempDataを= 新しいリスト< int型 >();
             foreachのVARの D データ)
            { 
                tempData.Add(D); 
            } 
            Console.WriteLineを($ " I:{}テンピ、合計:{data.Sum()}に等しい:{data.Sum() tempData.Sum ==()} " ); 
        }); 
        tasks.Add(T); 
    } 

    ザが待つ Task.WhenAll(手順); // またはTask.WaitAll(tasks.ToArray()); 
    Console.WriteLineを(" マルチランの終わりスレッド" ); 
}

TempDataをデータが相互に影響を与えないように、異なるスレッドコードの同じ部分が、それは、同じスコープではありません。

グローバル変数:データは、複数のスレッドがアクセスすることができ、リストは線形固定する場合にのみ読み取られる
ローカル変数:私はローカル変数であり、スレッドが除去アクセスにアクセスすることができる[VARのテンポ= iが;]、結果をプリントアウト、値同じであり、各スレッドは、別々の変数テンポへのアクセスを増加させます

I:10、合計:500500 、平等:真
I:10、合計:500500 、平等:真
I:10、合計:500500 、平等:真
I:10、合計:500500 、平等:真
I:10、合計:500500 、平等:真
I:10、合計:500500 、平等:真
I:10、合計:500500 、平等:真
I:10、合計:500500 、平等:真
I:10、合計:500500 、平等:真
I:10、合計:500500平等のために、:真

スレッド変数:TempDataを、唯一の自分の各スレッドのアクセス、互いに独立して、結果

I:3、総:500 500 、平等:真
I:6、合計:500500 、平等:真
I:0、合計:500 500 、平等:真
I:1、合計:500 500 、平等:真
I:4、合計:500 500 、等式:真
:I 2、合計:500 500 、等式:真
I:7、合計:500 500 、等式:真
I:5、合計:500 500 、等式:真
I:8、合計:500500 、平等:真
I:9、総:500500平等のために、:真

注意を払うために、マルチスレッドの必要性を書いて、変数のスコープ、そうでない場合はプログラムの結果は、所望の結果を使い果たすことはありません、注意、変数のスコープに注意を払います。

おすすめ

転載: www.cnblogs.com/zhao123/p/11084692.html