平成31 午後1 問3 設問4 (3)

素人さん  
(No.1)
AXのP4,P2 
AYのP2,P4
もデッドロックが起こると考えております。
例えば、
①AXのP4をロック
②AZのP2をロック
③AZのP4のロック待ち(①でロックされてるので)
④AXのP2のロック待ち(②でロックされてるので)

処理の順番てきにこれも起こり得ると考えておりますが、回答としては不適切なのでしょうか?
お手数ですが、ご教示お願いします。
2020.10.11 19:06
同感さん 
(No.2)
うまく説明はできないのですが、どの処理順で並列実行しても、「P2とP4の組」でデッドロックが発生するより先に、「P4とP9の組」でデッドロックが発生するようですので、「P2とP4の組」では正答にはならないのだと思います。

※私も疑問に思っていたので、AXとAZの処理の並列実行した時、それぞれのトランザクションが在庫テーブルのどの行をロックしているのか、書き起こして確認してみました。(エディタにコピペしていただくと多少見やすくなるかもです)
  かえって混乱させてしまうかもですが、ご参考まで。。

◆図3:デッドロックのケース1

処理1      処理2        在庫テーブルの品番(P1-9)行とそれをロックしている処理
[AX]        [AZ]        P1    P2    P3    P4    P5    P6    P7    P8    P9  
P1          --          --    --    --    --    --    --    --    --    --  
P4          --          --    --    --    --    --    --    --    --    --
P9          --          --    --    --    --    --    --    --    --    --
UPDATE      --          AX    --    --    AX    --    --    --    --    AX  手順②  AXが更新行をロック(P1,P4,P9)
--          P3          AX    --    --    AX    --    --    --    --    AX
--          P7          AX    --    --    AX    --    --    --    --    AX
--          P9          AX    --    --    AX    --    --    --    --    AX
--          UPDATE      AX    --    AZ    AX    --    --    AZ    --    !!  手順②  AZが更新行をロック(P3,P7,P9)←P9はAXのロック開放待ち
P2          --          AX    --    AZ    AX    --    --    AZ    --    AX
P9          --          AX    --    AZ    AX    --    --    AZ    --    AX
UPDATE      --          AX    AX    AZ    AX    --    --    AZ    --    AX  手順⑤  AXが更新行をロック(P2,P9)
P3          --          AX    AX    AZ    AX    --    --    AZ    --    AX
UPDATE      --          AX    AX    !!    AX    --    --    AZ    --    AX  手順⑤  AXが更新行をロック(P3)←P3はAZのロック開放待ち

デッドロック発生



◆図4:デッドロックのケース2

処理1  処理2        在庫テーブルの品番(P1-9)行とそれをロックしている処理
[AX]        [AZ]        P1    P2    P3    P4    P5    P6    P7    P8    P9  
P1          --          --    --    --    --    --    --    --    --    --                      
P4          --          --    --    --    --    --    --    --    --    --
--          P3          --    --    --    --    --    --    --    --    --
--          P7          --    --    --    --    --    --    --    --    --
--          P9          --    --    --    --    --    --    --    --    --
--          UPDATE      --    --    AZ    --    --    --    AZ    --    AZ  手順②  AZが更新行をロック(P3,P7,P9)
--          P2          --    --    AZ    --    --    --    AZ    --    AZ
P9          --          --    --    AZ    --    --    --    AZ    --    AZ
UPDATE      --          AX    --    AZ    AX    --    --    --    --    !!  手順②  AXが更新行をロック(P1,P4,P9)←P9はAZのロック開放待ち
--          P4          AX    AZ    AZ    !!    --    --    --    --    --  手順⑤  AZが更新行をロック(P2,P4)←P4はAXのロック開放待ち

デッドロック発生
2020.10.12 23:19
素人さん  
(No.3)
丁寧にご回答くださりありがとうございます!
とても分かりやすい図でした!
確かに、先にp4p2で、デッドロックが起きるので、当方の考えでは不適切でしたね。
すっきりしました。
ありがとうございます。
2020.10.18 10:10

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop