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

使用 MVar 或通道。参见 RealWorld Haskell 的第 24 章:http: //book.realworldhaskell.org/read/concurrent-and-multicore-programming.html

于 2008-10-26T18:28:18.280 回答
0

如果你想真正 fork 一个进程,Unix 风格,你需要forkProcess使用http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html

在这种情况下,MVars 和 TVars 不做进程间通信,所以你不能用它们来做 IPC。IPC 的所有标准技术(管道、套接字等)仍然有效。如果您想要更高级的东西,请查看 Cloud Haskell http://www.haskell.org/haskellwiki/Cloud_Haskell

于 2014-02-21T10:06:06.160 回答