2015-01-15 3 views
0

У меня есть несколько работников, раздвоенных из родительского процесса, и необходимо сообщить им все в одно и то же время для запуска/остановки;Контроллер и работники - сигнал для запуска/остановки

Родитель:

while(1) 
{  
    workers_start! 
    usleep(work_time); 
    workers_stop! 
    usleep(sleep_time); 
} 

Что я должен использовать, чтобы информировать их ВСЕ быстро (!)? Семафоры (считая N), мьютексы, сигналы (после execve forked program)? Я слышал, что семафоры/мьютексы медленны. Я не уверен в сигналах, но не знаю, является ли отправка большого количества сигналов хорошей идеей (N рабочих * 1 или 2 сигнала/за 0.2 сек., Где N - ядра процессора).

Извините, это про linux.

+0

Экспериментируйте со всеми вариантами. –

ответ

2

Возможно, вы захотите, чтобы весь ваш рабочий был обработан группой процессов. Вы можете сделать это по телефону

setpgid(pid_t pid, pid_t pgid) 

Где «PID является возвращение„вилки()“вызов для каждого из ваших рабочих и PGID является проектной группой ID всех ваших работников, и должны быть . же для всех работников страница руководства здесь:

http://man7.org/linux/man-pages/man2/getpgrp.2.html

Затем вы можете послать сигнал на все ваши процессы с помощью одного вызова

killpg(int pgrp, int sig) 

Где pgrp это группа, которую вы назначили всем своим работникам на шаге выше. Что касается значений «sig» в вызове killpg, если у вас есть платформа POSIX, вы можете захотеть использовать пользовательские siganls, например SIGUSR1, SIGUSR2 для запуска и остановки сигнализации соответственно. Если нет, вы можете использовать стандартные сигналы и захватывать их (переопределить их поведение). Страничное руководство к killpg здесь:

http://man7.org/linux/man-pages/man2/killpg.2.html

Я надеюсь, что это достаточно ясно, и похоже на то, что вы ищете.

+0

Спасибо, полностью забыл об этом. Я попробую. – KaP

0

Это зависит от операционной системы, которую вы используете. Как правило, информация о качестве «Я слышал, что семафоры медленны» всегда следует принимать с солью. Некоторые быстрые тесты, вероятно, покажут наилучшее решение для вашего дела :)

Смежные вопросы