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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> потокобезопасность epoll/kqueue 
:(
    Опции темы
kometa_75
Дата 27.8.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ув. коллеги, у кого есть информация по сабжу ? Имеется в виду, можно ли удалять события из другого потока не используя объекты синхронизации(мьютексы и т.п.) ? В одном проекте видел нечто подобное, однако инфы по safe threading вышеупомянутых интерфейсов не нашёл.
PM MAIL   Вверх
MAKCim
Дата 27.8.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



можно (в плане того, что безопасно), но не нужно (в плане того, что потом хрен поймешь, что происходит  smile )



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nerezus
Дата 27.8.2008, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Эм, а как это относится к потокам threads, там же как бы типа select для потоков streams?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MAKCim
Дата 27.8.2008, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(nerezus @  27.8.2008,  22:23 Найти цитируемый пост)
Эм, а как это относится к потокам threads

к примеру, вызов epoll_ctl() для одного и того же дескриптора из двух потоков


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nerezus
Дата 27.8.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



А если с ним, как с графикой, т.е. все в 1 потоке?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MAKCim
Дата 28.8.2008, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(nerezus @  27.8.2008,  23:26 Найти цитируемый пост)
А если с ним, как с графикой, т.е. все в 1 потоке? 

не понял
что как с графикой?
с кем с ним? с epoll_ctl()?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
kometa_75
Дата 28.8.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за ответ. Меня он вполне удовлетворил. 
 Немного поясню для тех кто не в курсе. В одном потоке создаётся объект-дескриптор epoll/kqueue. В нём же имеются функции на добавление/удаление сокета. Опять, здесь же происходит обращение к объекту-дескриптору на предмет каких-либо изменений в состоянии сокетов. Иначе говоря, вызывается функция epool_wait/kevent. Таймаут на этот вызов достаточно приличный. Я выбрал 5 сек. 
 Теперь,  необходимо реализовать возможность удаления сокета или события, причём моментальную. Понятное дело, что если использовать мьютексы(или что-то в этом роде) то в самом худшем случае доступ случится как раз через время таймаута(5 сек). К тому же, не совсем понятно что блокировать. Массив событий ? Объект-дескриптор ?
 Пытался реализовать различные методы с дополнительными массивами, примитивными уборщиками мусора и т.п. Потом глянул исходники одной сетевой либы, где на этот счёт особо не заморачиваются, а удаляют события без всяких синхронизаций. Хотя создание и работа с объектами epoll/kqueue ведутся в отдельном потоке.
 
PM MAIL   Вверх
MAKCim
Дата 28.8.2008, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



kometa_75
так и есть
объект eventpoll синхронизируется ядром, т. к инкапсулирует блокировку


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
kometa_75
Дата 28.8.2008, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(nerezus @ 27.8.2008,  23:26)
А если с ним, как с графикой, т.е. все в 1 потоке?

В одном потоке не получится. Вызовы epoll_wait/kevent должны иметь солидный таймаут. Желательно более одной секунды. Иначе приложение будет вываливаться. Проверено уже неоднократно. Следовательно работу с сетью надо выносить в отдельный поток. Но вызывать функции удаления сокета/события приходиться не из этого потока. Увы. Ничего другого пока не придумали.
PM MAIL   Вверх
nerezus
Дата 28.8.2008, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Цитата

с кем с ним? с epoll_ctl()?
 Ну вся работа с GUI осуществляется как правило в одном потоке.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MAKCim
Дата 28.8.2008, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(nerezus @  28.8.2008,  08:45 Найти цитируемый пост)
Ну вся работа с GUI осуществляется как правило в одном потоке.

чего то я не пойму
причем здесь GUI?
мы говорим про epoll/kqueue, дескрипторы файлов и потоки
дескриптор eventpoll можно безопасно использовать из разных потоков
это ответ на вопрос


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
andrew_121
Дата 2.10.2009, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Прошу прощения за пост в чужую тему.

Цитата(MAKCim @  28.8.2008,  08:45 Найти цитируемый пост)
так и есть
объект eventpoll синхронизируется ядром, т. к инкапсулирует блокировку 


К примеру, другой поток может попытаться использовать события которые были удаленны мгновением раннее в основном потоке. Как быть в этом случае?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 2.10.2009, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(andrew_121 @  2.10.2009,  01:45 Найти цитируемый пост)
К примеру, другой поток может попытаться использовать события которые были удаленны мгновением раннее в основном потоке. Как быть в этом случае? 

это как?
объекты epoll_event, передаваемые в epoll_wait должны быть локальны для потока


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
andrew_121
Дата 2.10.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Цитата(MAKCim @  2.10.2009,  15:47 Найти цитируемый пост)
это как?

э... Не правильно выразился.
Т.е. дескрипторы.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 2.10.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(andrew_121 @  2.10.2009,  16:21 Найти цитируемый пост)
Т.е. дескрипторы. 

что значит использовать дескрипторы в epoll_wait(), которые были удалены в основном потоке? ;)



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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

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

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


 




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


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

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