現在のコンピューター環境では、同じプログラム上で複数のスレッドが同時に動作する、いわゆるマルチスレッドプログラミングが簡単に実行可能となっています。
しかしマルチスレッドプログラミングは、通常のシングルスレッドプログラミングより難易度が高く、安易に踏み込むとさまざまな問題が発生することが知られています。
本日紹介する「The Deadlock Empire」は、そのようなマルチスレッドプログラミングで発生するさまざまな問題を、クイズ形式で出題するオンラインゲームサイトです。
自分がスケジューラとなってスレッドを操り、同期やロック、セマフォ、条件変数といったさまざまな概念を学ぶことが可能となっています。
スケジューラーとなりデッドロック帝国を打ち破る
The Deadlock Empireでは、最初に2つのチュートリアルで問題の解き方を学べます。
▲「Tutorial 1: Interface」では画面の見方を学べます。画面の中程に問題が掲載されていて、この場合二つのスレッドでクリティカルセクションに同時に到達すれば良いということが分かります。Thread 0、Thread 1の下に「Step」ボタンがあるので何回かクリックして同時にcritical_section()まで進めれば成功です。
▲「Tutorial 2: Non-Atomic Instructions」では、非アトミックな命令を扱うための「Expand」ボタンの使用法を学べます。この問題も同時にcritical_section()まで進めれば成功ですが、Expandボタンを利用して、「a = a + 1」の代入命令の途中までそれぞれのスレッドで進めておく必要があります。
この次からが実際の問題です。
▲「Boolean Flags Are Enough For Everyone」では、フラグを使ったクリティカルセクションの防御が役にたたないことが学べます。二つのスレッドで「flag != false」のチェックの先まで進めておけば、簡単にcritical_section()に同時に到達できます。
このようにマルチスレッドプログラミングのポイントを実際に手を動かしながら学習することができる問題が次々と出題されていきます。
まとめ
The Deadlock Empireではマルチスレッドプログラミングのはまりどころを楽しく学習することができます。ソースコードはC#で記述されていますが、ベーシックな表現になっているので、C#を良く知らないという開発者の方でもチャレンジ可能だと思います。