Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Alarm. Mutex. Semaphor. Синхронизация, Нужно использовать несколько alarm()'ов 
V
    Опции темы
konshyn
Дата 18.11.2013, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Привет.
В общем, суть:
Есть главный процесс. В нем, создаются потоки, которые используют общие данные(бинарное дерево, если кому интересно).
Каждую секунду и каждые 30 секунд нужно проверять это дерево и удалять из него элементы, если нужно.
Решил сделать через alarm(). Но в чем проблема: alarm можно использовать только один в процессе.
Другими словами, на данныый момент у меня в программе три процесса: первый создает потоки, второй каждую секунду проверяет дерево, третий проверяет каждые 30 секунд дерево. Все эти три процесса могут изменять дерево.
Потоки синхронизируются мьютексами, а процессы - семафорами. 

В процессе написания темы возникла еще одна идея: создать один процесс с одним alarm() и там считать секунды (по mod 30).

И вопрос: может это все как-то можно по-другому реализовать? Если можно, то как?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
bsa
Дата 18.11.2013, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



konshyn, alarm ставится на ближайшее время. Когда сработает, переставляется на следующее. И так далее...
PM   Вверх
konshyn
Дата 18.11.2013, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(bsa @ 18.11.2013,  10:42)
konshyn, alarm ставится на ближайшее время. Когда сработает, переставляется на следующее. И так далее...

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

Для интересующихся:
Просто ставлю каждый раз alarm(1).
В обработчике сигнала осуществляю только факт получения сигнала(использую флаг, в общем).
и есть отдельный поток, который стоит все время в pause(), чтобы не ело процессорное время(благо, если стоит опция SA_RESTART в sigaction(), то pause() не возобнавляется.. кто это придумал - гений:))
при получении сигнала функция pause() обрывается и уже смотрит, была это 30-ая секунда или нет, и в соответствии с результатом вызывает поиск по соответствующему полю.



Это сообщение отредактировал(а) konshyn - 28.11.2013, 12:17


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.