記事検索

検索ワードを入力してください。
Sky Tech Blog
排他処理と​優先度に​ついて

排他処理と​優先度に​ついて

排他処理を行う際に、OSの挙動を意識する重要性を解説しています。特に、Mutexを使用したタスクの優先度変更やデッドロックのリスクについて説明しています。

日々の業務で排他処理を組み込む事も多くあると思いますが、その際に、OSがどういう挙動をするのかを意識しておいた方が良いケースがあるのでご紹介します。

複数のタスクが、Mutexを使って排他をかけて、共有メモリ領域に書き込みをするというような、処理です。

図のようにタスクAが先にMutexを取得するので、タスクBは、タスクAがMutexを解放するまで処理を待ちます。
ここで気を付けた方がよいこととして、タスクAは、タスクBより優先度が低いタスクになります。

そのため、OSによっては、自分より優先度の高いタスクがMutexを取得しに来ると、自身の優先度が変わるケースがあります。
図の吹き出しに記載しているように、Mutexを取得しに来たタスクの優先度まで引き上げられたり、一定の優先度まで引き上げられたりなどが考えられます。

Mutexを取得しに来たタスクの優先度まで自身の優先度が上がるようなケースで例えば、次のような処理を作ってしまうと、デッドロックしてしまいます。

処理としては、タスクA,BがMutexを取得するのは同じですが、タスクAには、タスクCのフラグセットを待つ処理が入っています。
しかし、タスクAは、タスクBまで優先度が上がっているため、タスクCはフラグをセットできず、タスクAは、フラグのセットを待ち続けるという状況になってしまいます。

排他処理を行うときに、ご自身の使っているOSがどういう挙動をするのかを意識しながら、組み込んでいくことで、デッドロックを防ぐことができると思います。

以上、お読み頂きありがとうございました。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム