2

ここで説明されているように、Erlangポートを介してErlangプロセスからC関数を呼び出そうとしています:

http://www.erlang.org/doc/tutorial/c_port.html

本番環境では、C 関数を並行して呼び出す複数の Erlang プロセスが必要で、それぞれに異なる引数セットが必要です。

私の質問は、これは C 関数レベルでスレッドセーフになりますか?

ドキュメントでは、「接続されたプロセス」を作成する制御 Erlang プロセスについて説明しています。これは、「外部プログラム」(C 関数) の分離されたインスタンスを作成する責任があるかのように聞こえます。

C レベルではスレッド セーフのように聞こえますが、100% 確実にしたいと思います。

ティア

4

2 に答える 2

0

実装にもよるかもしれませんが、ポートでは、あなたが言及した理由から、答えはほぼ間違いなく「はい」です。NIF を使用していて、NIF 内で共有メモリを使用している場合は、スレッドの安全性について懸念があります。

ただし、ポートを使用すると、「制御プロセス」はシリアライゼーション (一連に配置されている場合) レイヤーとして機能します。つまり、リクエストは一度に処理されるのではなく、1 つずつ処理されます。さらに、ポートが使用する通信プロトコルにもこのシリアル実行が必要であると私は信じています (ただし、確かなことはわかりません)。

于 2015-04-22T16:05:31.797 に答える