並行処理において、排他制御は欠かせません。 Web プログラミングで使われることの多い、 MySQL において排他制御のやり方を考えてみます。 ショッピングサイトなどにおいては、ある商品をたくさんのユーザーが一斉に注文するという状況がおこります。 人気商品などの場合とくに起こりやすいと思われます。 このとき、注文にともなって商品の在庫を減らしていくという処理が必要になりますが、 在庫から減らした数と注文数が常に等しくなるように整合性を取らねばなりません。 注文を受け付けるときには 残りの在庫数を確認 (在庫があれば)注文数を増やす 在庫を減らす という処理の流れになるでしょう。 しかし、この一連の処理はそのままでは不可分な操作ではなく、 それぞれの処理の間に別のユーザーからの注文処理(の一部)が割り込んでくる可能性があります。 すると、在庫と注文の間に不整合が生まれてきます。 以下で実際に