2010-12-27 26 views
7

私はerlangには新しく、erlangは並行性指向のプログラミングであり、変更可能なデータ構造を持たないため、並列化が簡単です。erlangはどのように共有リソースにアクセスしますか?

とにかく、同じファイルへの書き込みなど、共有リソースはまだ存在しています。この場合、erlangは2つのプロセス間で共有リソースへのアクセスをどのように同期させますか?

答えて

11

一般的には、プロセスが共有リソースにアクセスする必要があります。他のプロセスは、共有リソースへの情報の読み取りまたは書き込み要求のために、単一のマネージャープロセスにメッセージを送信します。

いくつかの共有リソース(たとえば、いくつかのタイプのETSテーブル)は複数のプロセスで読み取ることができますが、1つのプロセスだけがに書き込むことができます。。だから、テーブルへの書き込みをシリアル化する誰かがそれを読むことを許可する一つのプロセスを設定することができます。

+0

私の経験から、リクエストをシリアライズするプロセスは、しばしば汎用サーバー(gen_server)として実装されています。http://www.erlang.org/doc/man/gen_server.html –

+1

複数のライターをETSテーブルに含めることができます。それはバケツロック方式IIRCを持っているので、異なるプロセスが書き込み操作を衝突させない限り、かなり高速です。タプルスペースは、ETSによく似ています。 –

関連する問題