同時ロックのために必要な構文を使用してC#ASP.NET B / Sモデルは、単一のソリューションは...テクニカルリファレンス番号をインクリメント繰り返されることはありません作り出します

外国人が技術的な記事を送信する場合はたまに好奇心、誰かがsquallingの周りではないでしょうか?個人攻撃を作りますか?中国の人々は、外国人が、これは文字ではありませんかわからない、人を打つのが好き?お聞きし好奇心旺盛。

 

開発過程で、私たちはしばしば、デバッガは、マルチユーザの同時操作の下での動作の実際の環境をシミュレートすることができません。

マルチユーザの同時動作をシミュレートするために、のは、完全にマルチユーザーの同時をシミュレートするために、マルチスレッドの例を書いてみましょう

28171438_RctF.gif コード
     クラス  SequenceTest
    {
        
/// <まとめ> ///  定義委任/// </要約> /// <PARAM NAME = "ユーザー"> ユーザー</ PARAM> デリゲート空隙 MakeSequenceDelegate(文字列 ユーザ); /// <まとめ> ///  これはテストシーケンス/// </要約> /// <PARAM = "ユーザー">名ユーザー</ PARAM> プライベートボイド MakeSequence(文字列の ユーザ)        { ため (INT  I  = 0 ;私は  < 10 。I ++  
        

        
 
        
 
          

        
 
        

        
 
        
 
          

            
   
            {
                BaseSequenceManager sequenceManager 
= 新しい新しい BaseSequenceManager(); //  アナログ2010年7月注文番号を生成                System.Console.WriteLine(ユーザー  + " " +  sequenceManager.GetSequence(" Order201007を" ));             }         } /// <まとめ> ///  ながらクリックし、これはマルチユーザのシミュレーションがある/// </要約> 公共のボイド DoTestは()        { //  動作する3人の同時ユーザーをシミュレート            MakeSequenceDelegate sequenceDelegate1は  = 新新  
                

   



        
 
        

        
 
          

            

   MakeSequenceDelegate(MakeSequence)。
            sequenceDelegate1.BeginInvoke(
" USER1 " 、  ヌル 、  ヌル );
            MakeSequenceDelegate sequenceDelegate2 
= 新しい MakeSequenceDelegate(MakeSequence)。            sequenceDelegate2.BeginInvoke(" USER2 " 、  ヌル、  ヌル);             MakeSequenceDelegate sequenceDelegate3  = 新しい MakeSequenceDelegate(MakeSequence)。            sequenceDelegate3.BeginInvoke(" USER3 " 、  ヌル、  ヌル  

 
);
        }
    }

 

デザインの効果の下に配列表は、現在のシーケンスのテーブル番号に保存されている多くのどのような情報のようなものです。

 

無同時制御するので、プログラムの出力は、シングルユーザ・オペレーティング・テストは、テストが並行性の低い運転状態であるコースの場合を、以下。

どうなる、およびマルチユーザーを保証することはできません、完全に独自の順序番号を生成することができますシーケンスの急性損失の繰り返しがあるでしょう。

並行性の問題が発生するのはなぜ?あなたが読んでいるので、私はまた、あなたが列を更新するときに、ユーザーが0007この番号を読んだことがある一方で、同じプログラムが複数のコピー、1,2を実行しているので、私はまた、シーケンスを更新し、お読みください。

 

作用効果同時実行制御、次のように:

この番号は連続しており、状況は失われていない、何の重複が発生はありません。

 

ここでは、並行性を回避する方法は?BaseSequenceManagerは除外同時処理後に実施しました。

            

           

            プライベート静的読み取り専用オブジェクトSequenceLock =新しいオブジェクト();

 

    文字列のreturnValue = String.Emptyを。

            //同時実行制御改善するために、ここではロック機構を使用して
            ロック(SequenceLockを)
            {

                    returnValue =データベース内の配列(A)の現在の値を読み出します

                    アップデート配列データベース(ⅱ)

            }

            returnValueを返します。

   

データベースが読み込まれているため、更新、2段階の操作を必要とするが、並行性の問題につながっています。

 

上記の記事は、主に以下の技術的な問題に関連しています:

1:マルチスレッド化のシミュレーションプログラムを書くことができるようにする必要があります。

2:どのようにパラメータを渡す機能スレッドマルチすることを学ぶ必要があります。

3:これは、いわゆるコア・コンポーネント自動テストの基礎と考えられます。

4:ロックステートメント(C#リファレンス)http://msdn.microsoft.com/zh-cn/library/c5kehkcz(VS.80).aspx

 

UPと本当に実際の本番環境で予期しないエラーの多くを入れて、テスト管理ソフトウェアを使用して簡単には、多くの場合、マルチユーザーの同時実行の原因のテスト動作は、それの一部を占めて繰り返すことができないである、発生する傾向があります。

上記の手順は何もありませんが困難午後は、読者が参照を持っているワークロードを評価するという希望を調整する前にほぼ2-3時間を過ごしました。

 

国内管理ソフトウェアのカテゴリで推定し、90%以上がよりシンプルでより容易ではない方法は、十分に説得力がある場合には90%以上が、なぜ今、アプリケーションの同時実行の問題とデータベースの並行性の問題を考慮していない、厳しいマルチユーザー同時試験を行うませんでした自分自身に対して、その後、非常に多くの複雑な並行処理を行います。

 

ます。https://my.oschina.net/iwenr/blog/227972で再現

おすすめ

転載: blog.csdn.net/weixin_33941350/article/details/91675284