排他制御の粒度と2相ロックとは?はいたせいぎょのりゅうどとにそうろっく
排他制御の粒度と2相ロックとは、ロックをかける対象の大きさが粒度で、テーブル単位から行単位へ細かくするほど同時実行性は上がり、管理するロック件数と処理は増える。2相ロックは、ロックを取るだけの成長相と解放するだけの縮退相に分けて途中で取り直さないことで、直列可能性(順に実行したのと同じ結果になること)を保証する方式。
最終更新:2026-10-06
エンベデッドSPを最短で暗記・合格する →背景
同じデータを複数の実行主体が触ると壊れる、という点ではRTOSのミューテックスと同じ問題を扱う。違うのは、データベース側が「壊れない」だけでなく「順番に実行したのと同じ結果になる」ことまで要求する点で、そのために取得と解放の順序へ規律を入れたのが2相ロックである。組込みでもデータロガーやIoTゲートウェイがDBを抱えると、粒度の選び方がそのまま書込みスループットの上限になる。
具体例
エッジ側の記録に広く使われるSQLiteは、既定ではデータベース単位という最も粗い粒度でロックし、書込み中は読取りまで待たされる。WALモードに切り替えると読取りが書込みと並走できるようになり、粒度を落とすことが同時実行性へ直結することが分かる。
試験での引っ掛け
細かいほど良い、ではない。ロック件数と管理オーバヘッドが増え、多数の行を舐める処理では粗い粒度のほうが速い。また2相ロックが保証するのは直列可能性だけで、デッドロックは防げない——取得順序が交差すれば起きる。縮退相に入ったら新たなロックは取れない、という向きも問われる。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。