リソース共有アクセス調整
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/03 17:00 UTC 版)
「並行計算」の記事における「リソース共有アクセス調整」の解説
並行計算の最も身近な課題になるのは、複数のプロセス/スレッドで一つのリソース共有するためのアクセス調整をする並行性制御である。ここでよく取り沙汰されるのは競合状態、デッドロック、リソース欠乏などである。下は共有リソースのコード例である。 boolean withdraw(int withdrawal) { if (balance > withdrawal) { balance = balance - withdrawal; return true; } return false;} ここでbalance=500としてプロセスAとプロセスBを走らせる。Aがwithdraw(300)を、Bがwithdraw(350)をコールする。Aが2行目をtrueで終えて3行目に入る前に、Bが2行目に入るとbalance > withdrawalはここでもtrueになってしまい、AとBの双方が減算してbalance=-150となり、口座残高以上の金額が引き落とされてしまうことになる。こうしたリソース共有問題の並行性制御では、クリティカルセクションのロック(セマフォ・ミューテックス・モニタなど)同期がよく使われる。 並行システムは共有リソース(通信媒体を含む)に依存しているため、並行計算は一般にリソースへのアクセスに関する何らかの調停回路を実装する必要がある。これにより無制限の非決定性問題が生じる可能性が出てくるが、調停回路を注意深く設計すればその可能性を限りなくゼロに近づけることができる。だが、リソース上の衝突問題への解決策は数々あるが、それら解決策は複数のリソースが関わってきたときに、新たな並行性問題(同期のデッドロックなど)を生じる。非ブロックアルゴリズムはそれらに対応できる並行性制御とされる。
※この「リソース共有アクセス調整」の解説は、「並行計算」の解説の一部です。
「リソース共有アクセス調整」を含む「並行計算」の記事については、「並行計算」の概要を参照ください。
- リソース共有アクセス調整のページへのリンク