![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
kometa_75 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
Ув. коллеги, у кого есть информация по сабжу ? Имеется в виду, можно ли удалять события из другого потока не используя объекты синхронизации(мьютексы и т.п.) ? В одном проекте видел нечто подобное, однако инфы по safe threading вышеупомянутых интерфейсов не нашёл.
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
можно (в плане того, что безопасно), но не нужно (в плане того, что потом хрен поймешь, что происходит
![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Эм, а как это относится к потокам threads, там же как бы типа select для потоков streams?
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
к примеру, вызов epoll_ctl() для одного и того же дескриптора из двух потоков -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
А если с ним, как с графикой, т.е. все в 1 потоке?
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
не понял что как с графикой? с кем с ним? с epoll_ctl()? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
kometa_75 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
Спасибо за ответ. Меня он вполне удовлетворил.
Немного поясню для тех кто не в курсе. В одном потоке создаётся объект-дескриптор epoll/kqueue. В нём же имеются функции на добавление/удаление сокета. Опять, здесь же происходит обращение к объекту-дескриптору на предмет каких-либо изменений в состоянии сокетов. Иначе говоря, вызывается функция epool_wait/kevent. Таймаут на этот вызов достаточно приличный. Я выбрал 5 сек. Теперь, необходимо реализовать возможность удаления сокета или события, причём моментальную. Понятное дело, что если использовать мьютексы(или что-то в этом роде) то в самом худшем случае доступ случится как раз через время таймаута(5 сек). К тому же, не совсем понятно что блокировать. Массив событий ? Объект-дескриптор ? Пытался реализовать различные методы с дополнительными массивами, примитивными уборщиками мусора и т.п. Потом глянул исходники одной сетевой либы, где на этот счёт особо не заморачиваются, а удаляют события без всяких синхронизаций. Хотя создание и работа с объектами epoll/kqueue ведутся в отдельном потоке. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
kometa_75,
так и есть объект eventpoll синхронизируется ядром, т. к инкапсулирует блокировку -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
kometa_75 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
В одном потоке не получится. Вызовы epoll_wait/kevent должны иметь солидный таймаут. Желательно более одной секунды. Иначе приложение будет вываливаться. Проверено уже неоднократно. Следовательно работу с сетью надо выносить в отдельный поток. Но вызывать функции удаления сокета/события приходиться не из этого потока. Увы. Ничего другого пока не придумали. |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
чего то я не пойму причем здесь GUI? мы говорим про epoll/kqueue, дескрипторы файлов и потоки дескриптор eventpoll можно безопасно использовать из разных потоков это ответ на вопрос -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
Прошу прощения за пост в чужую тему.
К примеру, другой поток может попытаться использовать события которые были удаленны мгновением раннее в основном потоке. Как быть в этом случае? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
это как? объекты epoll_event, передаваемые в epoll_wait должны быть локальны для потока -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
что значит использовать дескрипторы в epoll_wait(), которые были удалены в основном потоке? ;) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |