.net column

.NET開発者のためのブログメディア
タスクのイメージ

C#のlock構文を使ってマルチスレッド処理の排他制御を行う

2020年04月17日

シングルスレッドで処理を実装する場合は特に気にする必要のない排他制御ですが、ひとたび処理をマルチスレッドで実装するとなれば、排他制御は考慮しないといけない要素です。排他制御を行わないとデータの不具合が発生し、アプリケーションの品質が著しく低下してしまいます。ここではマルチスレッドと排他制御、そしてC#での実装方法を紹介していきますので、確認していきましょう。

PG
そもそも、マルチスレッドってどういった意味なのでしょうか?
PM
端的に直訳すると、「複数同時処理」という意味です。計算などの時間がかかる処理をずっと待つのではなく、同時進行で別の処理も行うことを指します。このマルチスレッドを行う際は、排他制御を考慮しないと後で大変な目にあいますよ。

マルチスレッドとロック制御の関係について

マルチスレッドで動作させる場合には、排他制御を行う必要があります。この排他制御を行う場合に、最も注意を払うべき点は「デッドロック」です。デッドロックとは、排他制御などによる競合が発生し、アプリケーションが動作不能の状態に陥ってしまうことです。これは是が非でも避けなければなりません。

排他制御を行う方法として挙げられるのが、ロックを取得することです。
C#においてロックを取得するには、lock構文の活用が必要です。これを活用できるようになれば、プログラムの質も向上することでしょう。
それでは早速、実装方法を確認していきましょう。

lock構文による排他制御のサンプルコード

ここではC#のロック処理を利用しての排他制御を行います。
表示されるボタンを押下すると、マルチスレッドで処理を実行します。

実行画面
実行画面

出力結果
マルチスレッドの結果

PG
ロックを取得するってとても大切ですよね。競合が発生するなどでアプリケーションが停止したら、焦ってしまって対応できる自信がないです。
PM
焦って対応できない状況を作らないためにも、設計の段階で排他制御をどのように行うかなどを考慮しておく必要があります。エンジニアとして活躍したいならば、こういった考慮は当たり前のようにできるようにしておきましょう。

C#のlock構文を活用して、ワンランク上のプログラマーを目指しましょう

排他制御などは、本来は設計の段階で考慮されているべき事柄です。しかし、そこまで考慮されずに開発フェーズに進む現場も多々あります。そういった場合は、開発者自らが考慮してロック処理を行う必要がありますので、lock構文の活用方法は早めに理解することをおすすめします。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)