見出し画像

排他制御って大切                −技術解説−

1.「排他制御」ってご存知ですか?

  技術的な話です。
 ある処理をする時、他に処理させずに自分だけで(排他)で実行したい
 ことがあります。DBのレコード排他などが有名です。
  

2.「排他制御」をもう少し詳しく

  EXCELを複数人で共有して修正するなんてことはありませんか?
 「排他制御」があるから出来るんです。
 WORDなどは複数人で共有・修正出来ませんよね。うまく「排他」が
 出来ないからです。 
  便利そうですが、業務システム等ではどの様に使われるんでしょう?
 更新系のでDBのデータを適正に保つ為には必須です。 
 なぜって、下記だからなんです。
   ① 今のコンピュータシステムはマルチプロセス
     同時に、幾つもの処理が実行される。
   ② 処理の途中で実行していた処理の切替わりが発生する。
 これだけだと分かりにくいですね
    
  少しイメージで説明します。
 ある普通口座で、「振込」と「引き落とし」の処理が同時に
 実行されたとしましょう。普通に想定される問題ないケース。
   ①   もともと10万円あった。
   ②   10万円引き落とされる。
       10−10=0円
   ③   20万円振り込まれる。
        0+20=20万円
 順番通り処理されるので、20万円ですね。
 ここで、②の処理が途中で③に追い抜かれたらどうでしょうか?
 細かいですが、以下の通りです。
   ①   もともとの金額(10万円)を確かめる。
   ②   10万円の引き落とし処理が始まる。
   注:ここで、処理が追い越されます。
   ③   20万円振り込未処理が始まります。
 
   ②―1 口座の残金(10万円)を確認する。
   ②―2 残金を確認する。(10万円なので引き落とせる)
   ②―3 引き落とし結果を計算する。
       10−10=0円
       (まだ結果が書き込まれていません。)
  
   ③―1 口座の残金(10万円)を確認します。
   ③―2 振込後の金額を計算します。 
       10+20=30万円
   ③―3 振込結果(30万円)を口座に書き込みます。
   注:ここで、引き落とし処理が戻ってきます。
   ②―4 引き落とし結果(0円)を口座に書き込みます。
 はい、口座の残金は「0円」です。
 個々の処理は間違っていませんが、処理する順番が狂ってます
 「②」の処理中に他の処理が割り込まないように、
 その口座に「排他」をかけます。
 また、細かいですが、以下のとおりです。
   ①   もともとの金額(10万円)を確かめる。
   ☆   ②の処理をするため該当口座を「排他」します。
   ②   10万円の引き落とし処理が始まる。
   ☆   ③の処理をするため該当口座を「排他」します
       か、②処理中で当該口座が「排他中」なので
       「排他」出来ません。=>処理を待ちます
   ②―1 口座の残金(10万円)を確認する。
   ②―2 残金を確認する。(10万円なので引き落とせる)
   ②―3 引き落とし結果を計算する。
       10−10=0円
       (まだ結果が書き込まれていません。)   
   ③   20万円振り込未処理が始まりません。   
   ②―4 引き落とし結果(0円)を口座に書き込みます。
   ☆   ②の処理で該当口座「排他」を終了(開放)します。
       「排他」を待っていた③が「排他」を取った上で、
       処理を開始します。   
   ③   20万円振り込未処理が始まります。   
   ③―1 口座の残金(0万円)を確認します。
   ③―2 振込後の金額を計算します。 
        0+20=20万円
   ③―3 振込結果(20万円)を口座に書き込みます。
 はい、口座の残金は「20万円」です。ちゃんと出来ます。 
  

3.「排他」の裏読み


  前半長々と書きましたが、「排他制御」は重要かつ必要です。  

ここから先は

1,158字
この記事のみ ¥ 100
期間限定 PayPay支払いすると抽選でお得に!

サポートよろしくお願いします。ご感想、ご希望などいただければ嬉しいです