Я писал программу, которая разветвляется много раз, и каждая из разветвлений может также разветвляться на более мелкие части.
Каждый из дочерних элементов самого низкого уровня в конечном итоге выполняет сложные вычисления и выводит результаты, как я надеюсь, в файл с уникальным именем.
Идентификаторы должны быть уникальными, чтобы, когда все дочерние элементы были завершены, родитель мог получить дочерние элементы, а затем собрать данные.
В качестве примера, чтобы сделать это более конкретным, каждый из дочерних элементов создаст файл $unique_id.storable
, содержащий данные, которые обработал соответствующий дочерний элемент.
Когда родитель обнаруживает, что все дочерние элементы завершены, он использует хранимую память для обратного чтения файлов в хэш и использует, надеюсь, уникальный $unique_id
в качестве ключа.
Проблема возникает, когда два потомка рождаются почти одновременно. Прямо сейчас каждый из этих дочерних элементов запускает свой собственный независимый счетчик, так что несколько дочерних элементов могут создать $unique_id
с одинаковым именем, даже если данные в этих файлах действительно уникальны.
Как я могу разделить переменную-счетчик, простой скаляр, между вилками?
Я понимаю, что вопросы взаимодействия между процессами довольно распространены в Интернете, но я заметил, что многие решения решают общую проблему обмена произвольными объемами данных между процессами. Мне просто нужно поделиться одним скаляром, поэтому мне интересно, можно ли решить мою проблему более простым способом. В идеале, совсем в идеале, я бы предпочел решение, не задействующее "нестандартный" модуль. Я вижу, что иногда рекомендуется IPC::Shareable
, но мне интересно, может ли это быть излишним для моей проблемы, и в любом случае это один из тех «нестандартных» модулей.
Было бы разумно, если бы я сделал свой $unique_id
PID? Возможно ли, что родительская программа, работающая в течение, скажем, одной недели на интенсивно используемой машине, может повторно использовать PID и не гарантировать уникальность?
Буду признателен за любые советы, которые могут дать люди.