表は,ジョブ1〜3が資源A〜Cにかけるロックの種別を表す。
また,資源へのロックはジョブの起動と同時にかけられる。
ジョブ1〜3のうち二つのジョブをほぼ同時に起動した場合の動きについて,適切な記述はどれか。
ここで,表中の"-"はロックなし,"S"は共有ロック,"X"は占有ロックを示す。
ジョブ\資源|A|B|C/1|S|-|X/2|S|X|-/3|X|S|-
正答2
解説
正解は2です。
共有ロックと占有ロックの両立性から、資源待ちの有無を判断する問題です。
共有ロック(S)同士は同時にかけられますが、占有ロック(X)はほかのどのロックとも同時にかけられません。
表から、ジョブ1はAにS、CにXをかけます。
ジョブ2はAにS、BにXをかけ、ジョブ3はAにX、BにSをかけます。
【選択肢別解説】
1:× ジョブ1が資源AにSをかけているので、後から起動したジョブ3はAにXをかけられません。
ジョブ3は資源待ちになります。
2:○ ジョブ1が要求するAのSは、ジョブ2のAのSと両立します。
ジョブ1が要求するCは、ジョブ2がロックしていません。
したがってジョブ1に資源待ちは生じません。
3:× ジョブ3はAにXを要求しますが、ジョブ2がAにSをかけています。
BのSもジョブ2のBのXと競合するので、ジョブ3は資源待ちになります。
4:× ジョブ3が資源AにXをかけているので、後から起動したジョブ1はAにSをかけられません。
ジョブ1は資源待ちになります。
【ポイント】
両立するのは「SとS」の組合せだけです。
同じ資源について、どちらか一方でもXがあれば待ちが発生すると覚えましょう。