![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Привет.
В общем, суть: Есть главный процесс. В нем, создаются потоки, которые используют общие данные(бинарное дерево, если кому интересно). Каждую секунду и каждые 30 секунд нужно проверять это дерево и удалять из него элементы, если нужно. Решил сделать через alarm(). Но в чем проблема: alarm можно использовать только один в процессе. Другими словами, на данныый момент у меня в программе три процесса: первый создает потоки, второй каждую секунду проверяет дерево, третий проверяет каждые 30 секунд дерево. Все эти три процесса могут изменять дерево. Потоки синхронизируются мьютексами, а процессы - семафорами. В процессе написания темы возникла еще одна идея: создать один процесс с одним alarm() и там считать секунды (по mod 30). И вопрос: может это все как-то можно по-другому реализовать? Если можно, то как? -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
konshyn, alarm ставится на ближайшее время. Когда сработает, переставляется на следующее. И так далее...
|
|||
|
||||
konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Я понимаю. Иногда достаточно озвучить проблему вслух(или, как в моем случае, создать тему на форуме), чтобы найти удовлетворяющее решение. Для интересующихся: Просто ставлю каждый раз alarm(1). В обработчике сигнала осуществляю только факт получения сигнала(использую флаг, в общем). и есть отдельный поток, который стоит все время в pause(), чтобы не ело процессорное время(благо, если стоит опция SA_RESTART в sigaction(), то pause() не возобнавляется.. кто это придумал - гений:)) при получении сигнала функция pause() обрывается и уже смотрит, была это 30-ая секунда или нет, и в соответствии с результатом вызывает поиск по соответствующему полю. Это сообщение отредактировал(а) konshyn - 28.11.2013, 12:17 -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |