5

そもそも Haskell を使用して子プロセスをフォークするにはどうすればよいでしょうか?

また、パイプがデータ共有の質問に対する明らかな解決策である場合、パイプを使用する以外にそれを行う方法はありますか? 私は、C での共有メモリ セグメント (shmget、*shmat、shmdt、および shmctl 関数) の使用に精通しています。Haskell はこれを真似できるでしょうか? もしそうなら、どのように?

お手数をおかけいたしますが、何卒よろしくお願いいたします。

私は関数型プログラミング言語に非常に慣れていないことを認めなければなりません。Haskell に関してはなおさらです。だから私がばかげたことを言ったら、私を許してください(そして私を訂正してください).

4

4 に答える 4

2

さらに良いのは、ソフトウェア トランザクション メモリ、つまり TVar と TChannel を使用することです。

同じ本、別の章をお勧めします: http://book.realworldhaskell.org/read/software-transactional-memory.html

この手法の実際の良い例を次に示します: http://sequence.complete.org/node/257

于 2008-10-26T19:01:21.927 に答える
1

OPは、スレッドではなくサブプロセスとの通信について尋ねました。そのために、パイプはそれを行うための完全に優れた方法です。必要に応じて、Haskell から C ライブラリ関数を直接呼び出すこともできますが、これは難しい場合があります。

この質問には、ここでより良い答えがあります:プロセス通信を扱う標準的な Haskell ライブラリはありますか?

于 2014-02-21T10:06:46.587 に答える
0

Unix スタイルのプロセスを実際にフォークしたい場合は、http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.htmlforkProcessで指定されているように使用する必要があります。

この場合、MVar と TVar はプロセス間通信を行わないため、それらを使用して IPC を行うことはできません。IPC のすべての標準的な手法 (パイプ、ソケットなど) は引き続き機能します。より高レベルなものが必要な場合は、Cloud Haskell http://www.haskell.org/haskellwiki/Cloud_Haskellをチェックしてください。

于 2014-02-21T10:06:06.160 に答える
0

MVar またはチャネルを使用します。RealWorld Haskell の第 24 章を参照してください: http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html

于 2008-10-26T18:28:18.280 に答える