4

私は Erlang を初めて使用し、現在、Erlang でリーダー/ライター プログラムを作成する際に問題があります。基本的に、共有メモリ ロケーションは任意の数のタスクで同時に読み取ることができますが、タスクが共有メモリ ロケーションに書き込む必要がある場合は、排他アクセスが必要です。私の考えでは、リーダー/書き込みメソッドをさまざまなプロセスに生成し、それらのメソッドで「リーダーの読み取り」/「ライターの書き込み」のようなものを出力するだけです。

ただし、セマフォ/ミューテックスの使用には本当に悩まされ、マルチスレッド/同時実行のバックグラウンドはありません。そのようなプログラムの書き方について、誰か手がかりを教えてください。

4

1 に答える 1

9

ミューテックスとセマフォは、2 つの同時プロセス/スレッド間の同期ポイントを定義する方法にすぎません。erlang では、これらは主に erlang プロセス間でメッセージを送受信することで置き換えられます。erlang でこれを行う慣用的な方法は次のようになります。

  1. データを保存してメッセージをリッスンするプロセスを erlang で生成します。
  2. ストレージ プロセスにメッセージを送信する他のプロセスを生成し、データの返送を要求したり、データの書き込みを送信したりします。

データ プロセスのメッセージ ボックスにより、他のユーザーが他のユーザーと同時にデータに書き込めないようにします。

于 2012-08-08T03:23:07.763 に答える