2013-04-18 4 views
0

Что такое способ реализации такой ситуации, используя только сигналы (не в режиме реального времени)? :Синхронизация с использованием сигналов

есть N Чайлдс (процессы, созданный fork()), 1 родитель, и синхронизация должна быть такая:

  1. родитель ждет любого дочернего сигнала.
  2. каждый ребенок посылает сигнал на родитель, а затем блокируется до получения сигнала от родительского
  3. родителя посылает сигнал к тому ребенку, который сигнализировать он заметил

Я не знаю, что делать, потому что только 2 пользовательские сигналы SIGUSR1, SIGUSR2, но у меня есть N Чайлдс, так много детей следует использовать только один тип сигнала, и я боюсь

какие-либо идеи? ..

ответ

0

вы не необходимо использовать данные пользователя и вы можете отправить любой сигнал любому ребенку ... или родительскому лицу, что вам нужно сделать, это просто поймать этот сигнал, используя функцию или sigaction() системы ... и от сигнала отправки ISR этого сигнала конкретному ребенку

0

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