Parallel :: ForkManager()模块是否支持全局变量的同步?

gal*_*ica 8 parallel-processing perl multithreading fork ipc

我对Perl中的这个Parallel :: ForkManager模块很新,它有很多学分,所以我认为它支持我需要的东西,我还没想到.

我需要做的是在每个子进程中,它根据每个子进程中计算的键值将一些更新写入全局哈希映射.但是,当我继续在for循环之外声明一个哈希映射并期望在循环之后更新哈希映射时,事实证明哈希映射保持为空.这意味着虽然循环内部的更新成功(通过打印出值),但在循环外部则不然.

有没有人知道如何编写这样一段代码来完成我想要的工作?

fri*_*edo 6

这不是Perl特定的问题,而是理解Unix风格的进程.当您fork进行新进程时,进程之间默认不共享任何内存.根据您的需要,有几种方法可以达到您想要的效果.

一种简单的方法是使用像BerkeleyDB这样的东西将哈希绑定到磁盘上的文件.绑定哈希可以在fork之前初始化,然后每个子进程都可以访问它.BerkeleyDB文件旨在安全地同时从多个进程访问.

更复杂的方法是使用某种形式的进程间通信.有关实现此目的的所有细节,请参阅perlipc联机帮助页,其中详细介绍了Perl支持的几种IPC方法.

如果你的Perl支持它,最后一种方法是使用线程并在它们之间共享变量.