Цитата(Andrey Sudnov @ May 18 2008, 07:59)

Второй вариант: отказаться от синхронизирующих функций pthread нафиг. Использовать pipe. Здесь встает вопрос, насколько эффективно реализованы эти каналы в коде ОС/libc. И не перекрывает ли потенциальная кривая реализация преимуществ над первым вариантом?
А ОС, собственно, какая?
Впрочем, если не нравятся пайпы, можно использовать сокеты

Для них есть высокоэффективная реализация оповещения об изменении состояния, правда, механизмы в разных ОС разные. Гляньте сюда -
http://monkey.org/~provos/libevent/Так или иначе, задержки будут намного меньше таймаута в неск. миллисекунд при небольшом количестве сокетов.
Цитата
Варианты еще?
Сигналы?
А вот что пишет Steven Grimm (http://monkeymail.org/archives/libevent-users/2007-January/000450.html):
Цитата
no UNIX-ish system I'm aware of has an equivalent to the Windows
WaitForMultipleObjects API that allows you to wake up on semaphores /
condition variables and on input from the network. Without that, any
solution is going to end up using pipes (or maybe signals, which have
their own set of issues in a multithreaded context) to wake up the
libevent threads.
однако, про локальные сокеты он почему-то не упоминает.
И еще

Вы зря,имхо, предпочитаете poll select'у, т.к. poll при каждом вызове гоняет структу в ядро => большой оверхед. С другой стороны селект имеет ограничени на кол-во дескрипторов. Во всяком случае в linux это так, поэтому и появился epoll().