Unix процесс синхронизации без pthreads / sempahores, сигналов? - PullRequest
0 голосов
/ 26 октября 2010

Я пытаюсь написать программу, которая не использует библиотеки pthreads или семафоров.Я хочу сделать некоторую синхронизацию с сигналами.Я читал о них в нескольких книгах по Unix, но до сих пор не совсем понял.Я написал некоторый макет / код программы, это не моя программа, но она дает представление о том, как я пытаюсь организовать процессы / сигналы.Похоже ли это на правдоподобное решение?

Ход программы:

Мэйн разветвляется случайное число раз и выполняет «программу» для каждого потомка.Программа присваивает дочернему значению значение 1 или 2 (например, ввод или вывод и т. Д.).

Я хочу, чтобы синхронизировать этих детей.Я думал, что использование сигналов возможно, и из того, что я прочитал, я хотел бы сделать что-то вроде:

Если child == 1, отправить parent (main) SIGUSR1, иначе, если child == 2 отправить parent (main) СИГУСР2.Когда родитель обслуживает сигнал, тогда конец.

Теперь вернемся в главное, я хочу организовать эти входящие сигналы.Я бы принимал только один тип за раз, поэтому, если ребенок отправляет мне SIGUSR1, я блокирую все SIGUSR2, или если ребенок сначала отправляет мне SIGUSR2, то я блокирую все SIGUSR1.Main будет принимать сигнал и обслуживать все сигналы этого типа до тех пор, пока его больше не будет, затем он будет проверять / разблокировать другой тип и обслуживать любой из этого типа, если они существуют, иначе main будет ожидать больше сигналов.

Похоже ли это на правильное использование сигналов и возможно ли это даже для сигналов?

Спасибо!

1 Ответ

1 голос
/ 27 октября 2010

Вы не говорите , почему вы хотите использовать сигналы. Вы просто пытаетесь понять, как работают сигналы?

Похоже ли это на правильное использование сигналов и возможно ли это даже для сигналов?

Я бы не подошел к тому типу дизайна, который вы представили, имея в виду сигналы. Вы не говорите, что делают дети, но я мог бы использовать каналы, сокеты или, возможно, очереди сообщений.

Если вы сможете добавить некоторую информацию о ваших целях высокого уровня, возможно, я смогу предложить вам более лучшее направление.

...