イチから全部作ってみよう(33)「排他制御」をトイレのアナロジーで理解する山浦恒央の“くみこみ”な話(202)(1/3 ページ)

ソフトウェア開発の全工程を学ぶ新シリーズ「イチから全部作ってみよう」。第33回は、複数人が同時にアクセスするシステムを開発するためのプログラミングで重要になる「排他制御」をトイレに例えて説明する。

» 2026年06月17日 06時30分 公開

1.はじめに

 山浦恒央の“くみこみ”な話の連載第170回から、入門者をターゲットとして、「イチから全部作ってみよう」というシリーズを始めました。このシリーズでは、多岐にわたるソフトウェア開発の最初から最後まで、すなわち、要求仕様の定義、設計書の作成、コーディング、デバッグ、テスト、保守までの「開発フェーズ」の全プロセスを具体的に理解、経験することを目的にしています。

 興味がある方は、連載第170回からのバックナンバーをご覧ください。

⇒連載「山浦恒央の“くみこみ”な話」バックナンバー

2.前回の振り返り

 前回は、PythonからSQLiteを操作し、データベースを作成するイメージを説明しました。プログラミングと組み合わせることで、データベースを動的に操作するイメージをつかんでいただけたでしょうか。

※画像はイメージです

 今回は、さらにもう一歩進め、「排他制御」というトピックをトイレに例えて説明します。非常に重要な考え方で、プログラミングを扱う読者の方であれば、いつか必ず使うことになりますので、イメージだけでもつかみましょう。学校で教えるプログラミングやアルゴリズムの授業は、自分一人しか使わないプログラムが中心ですが、実務では数千人が同時にアクセスするシステムを作ることになります。その時、カギになる考え方が「排他制御」です。

3.なぜ排他制御が必要なのか

 「なぜ排他制御が必要なのか」から話を始めます。

 ECサイトは、不特定多数の人が同時に商品を閲覧/購入するシステムです。このようなシステムにおいて、複数の人が同時に商品を購入すると、在庫データの整合性が失われる可能性があります(図1)。

図1 図1 2人のユーザーが同時に在庫1本の商品を購入するケース

 例えば、鈴木さんと山本さんが在庫数1本のワインをほぼ同時に購入したとします。これが実店舗で起きた事態であれば、どちらかが譲り合うことになるかと思いますが、コンピュータは譲り合いません。支払いが完了して、初めて売買が成立し、在庫本数から1本を引き算するので、図2の順序で進むと、両者の購入が成立してしまいます。

図2 図2 在庫数が1本なのに2人分の購入が成立する例

 図2の事象が、限定1本のビンテージワイン(例:ロマネコンティ)だと考えると、「後からキャンセル」とするわけにはいかず、システム的に未然に防ぐ必要があります。このような問題を未然に防ぐ仕組みが、「排他制御(mutual exclusion)」です。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

特別協賛PR
スポンサーからのお知らせPR
Pickup ContentsPR
Special SitePR
あなたにおすすめの記事PR