並行計算
Joule – データフロー言語。メッセージパッシングによって通信する。
KL1 – Guarded Horn Clausesに基づく論理型言語。第五世代コンピュータプロジェクトの研究成果。KLICなどの実装が利用可能。
Limbo – Alefからの派生。Plan 9の後継であるInfernoのシステム記述に使われた。
Oz – マルチパラダイム言語。共有メモリとメッセージパッシング、Futureも備えている。 Mozart Programming System – マルチプラットフォーム版 Oz
MultiLisp – Scheme に並列性サポート機能を追加した派生言語。
Occam – Communicating Sequential Processes (CSP) の影響を強く受けている。 Occam-π – Occamの派生言語。ミルナーのπ計算の考え方を導入。
Pict – ミルナーのπ計算の実装に基づいている。
SALSA – インターネット上での分散コンピューティングを指向したメッセージパッシング式の言語。
SR – 研究用言語。
他の多くの言語でもライブラリの形で並行性をサポートしている(機能的にも上記リストに挙げたものと遜色ない)。
並行計算の最も身近な課題になるのは、複数のプロセス/スレッドで一つのリソース共有するためのアクセス調整をする並行性制御である。ここでよく取り沙汰されるのは競合状態、デッドロック、リソース欠乏などである。下は共有リソースのコード例である。
ここでbalance=500としてプロセスAとプロセスBを走らせる。Aがwithdraw(300)を、Bがwithdraw(350)をコールする。Aが2行目をtrueで終えて3行目に入る前に、Bが2行目に入るとbalance > withdrawalはここでもtrueになってしまい、AとBの双方が減算してbalance=-150となり、口座残高以上の金額が引き落とされてしまうことになる。こうしたリソース共有問題の並行性制御では、クリティカルセクションのロック(セマフォ・ミューテックス・モニタなど)同期がよく使われる。
並行システムは共有リソース(通信媒体を含む)に依存しているため、並行計算は一般にリソースへのアクセスに関する何らかの調停回路を実装する必要がある。これにより無制限の非決定性問題が生じる可能性が出てくるが、調停回路を注意深く設計すればその可能性を限りなくゼロに近づけることができる。だが、リソース上の衝突問題への解決策は数々あるが、それら解決策は複数のリソースが関わってきたときに、新たな並行性問題(同期のデッドロックなど)を生じる。非ブロックアルゴリズムはそれらに対応できる並行性制御とされる。