Гость Опубликовано 30 мая, 2002 Жалоба Поделиться Опубликовано 30 мая, 2002 Короче идея гениальна: Сервер ====== Два потока (POSIX -pthread_*), один заблокирован и ждет accept()-ом новые соединения. Второй заблокирован select()-ом, прослушивая старые. И вот когда приходит новое, 1-ый разблокирует второй, посылая ему сигнал (напр., SIGALRM) и второй выходит из системного вызова select() и добавляет к маске файлов еще один сокет и снова начинает ждать, когда чего-нить придет. Так вот, с чем я столкнулся: 1) Маски сигналов потоков pthread_sigmask не работают!! когда шлю pthread_kill(поток,..), то поток _поток_ получает заблокированный сигнал!!!! 2) Обработчик вызывается только раз!!! 3) select() не хочет блокироваться (на обычных файлах, только что созданных). Проверял маску только на чтение - не хочет (а ведь файлы пустые!), только на ошибки - не хочет (но ведь ошибок-то нет!!) 4) В одном примере pthread_kill() вообще не работает, а только raise() Кто делал что-то такое или сталкивался с этим, ПЛИЗ (!!) помогите!! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 30 мая, 2002 Жалоба Поделиться Опубликовано 30 мая, 2002 Разобрался, частично. Просто сам с ушами ) НО: с select так и не разобрался. И еще: ПОЧЕМУ НАДО ВСЕ ВРЕМЯ ВЫЗЫВАТЬ sched_yiled() чтобы мог поработать и второй поток, даже с mutex, CV, sem... А на кой тогда шедулер? Без sched_yield() один крутится, сигналит чего-то, мутексируется, а второй даже вклиниться не успевает!! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.