如何在Haskell中的父进程和分叉子进程之间共享数据?

时间:2008-10-26 18:10:05

标签: haskell concurrency process

我怎么会首先使用Haskell来分配子进程?

另外,如果管道是数据共享问题的明显解决方案 - 除了使用管道之外还有其他方法吗?我熟悉在C中使用共享内存段(shmget,* shmat,shmdt和shmctl函数)。哈斯克尔能够模仿这个吗?如果是这样,怎么样?

我非常感谢您可以提供的任何帮助。

我必须承认我对函数式编程语言非常陌生,在Haskell方面更是如此。如果我说傻话,请原谅我(请纠正我)。

4 个答案:

答案 0 :(得分:2)

更好的是,使用软件事务内存 - 即TVars和TChannels。

会推荐同一本书,不同章节:http://book.realworldhaskell.org/read/software-transactional-memory.html

以下是此技术的一个很好的小例子:http://sequence.complete.org/node/257

答案 1 :(得分:1)

OP询问与子进程通信,而不是线程。为此,管道是一种非常好的方式。如果你愿意,你也可以直接从Haskell调用C库函数,尽管这可能会变得棘手。

这个问题在这里有更好的答案:Is there some standard Haskell library dealing with process communication?

答案 2 :(得分:0)

使用MVars或频道。请参阅RealWorld Haskell的第24章:   http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html

答案 3 :(得分:0)

如果你想实际分叉一个进程,Unix风格,你需要使用http://hackage.haskell.org/package/unix-2.4.2.0/docs/System-Posix-Process.html给出的forkProcess

在这种情况下,MVars和TVars不进行进程间通信,因此您无法使用它们来进行IPC。 IPC(管道,插座等)的所有标准技术仍然有效。如果您想要更高级别的内容,请查看Cloud Haskell http://www.haskell.org/haskellwiki/Cloud_Haskell