我一直在编写一个多次 fork 的程序,每次 fork 也可能 fork 成更小的部分。
每个最低级别的 child 最终都在运行复杂的计算并将结果输出到一个唯一命名的文件中,我希望如此。
ID 需要是唯一的,这样当所有的 child 都完成后, parent 可以收获 child ,然后收集数据。
作为帮助使这更具体的示例,每个 child 将生成一个文件 $unique_id.storable
,其中包含各自 child 已处理的数据。
当父级发现所有子级都已完成时,它使用可存储的文件将文件读回哈希,并使用希望唯一的 $unique_id
作为键。
当几乎同时生成两个 child 时,问题就出现了。现在,这些 child 中的每一个最终都在运行自己独立的计数器,这样多个 child 都可以创建一个名称相似的 $unique_id
,即使这些文件中的数据确实是唯一的。
我如何在 fork 之间共享一个计数器变量,一个纯粹的标量?
我意识到进程间通信的问题在互联网上相当普遍,但我注意到许多解决方案解决了在进程之间共享任意数量的数据的一般问题。我只需要共享一个标量,所以我想知道是否可以用更简单的方式处理我的问题。理想情况下,实际上非常理想,我更喜欢不涉及“非标准”模块的解决方案。我看到有时推荐使用 IPC::Shareable
,但我想知道这对我的问题来说是否有点过头了,无论如何,这是那些“非标准”模块之一。
如果我将我的 $unique_id
作为 PID 是否明智?父程序是否有可能在一台频繁使用的机器上运行一个星期,可能会重用 PID 并且不保证唯一性?
如果有人能提供任何建议,我将不胜感激。
最佳答案
为什么不把id传下去呢?根进程产生
1
2
...
这些,反过来产生
1.1
1.2
...
2.1
2.2
...
...
等等。
https://stackoverflow.com/questions/5658238/