Доброго! Вопрос такой - пишу многопоточное приложение. В разных потоках могут возникать "события", связанные с чтением из COM-порта, вводом пользователя и т.п., которые нужно передавать между потоками, желательно, без задержки.
Могу ли я открыть трубу (pipe, канал) между разными потоками, так, чтобы один писал в трубу, а другой - читал из неё. Если могу, то можно ли использовать это для синхронизации потоков? Т.е., если я скажу в одном потоке read, не зависнет ли у меня от этого вся программа?
Если нет, то я не вижу, как это решить другим способом. Блокировки, похоже, тут не помогают.
Если трубы не работают, то я не могу придумать пока что другого способа, как запись каждым потоком своих сообщений в свою очередь. Все очереди по кругу опрашивает менеджер процессов, перенаправляющий каждое сообщение в нужный поток. При этом, получается, что в каждом потоке должен быть цикл, включающий sleep, чтение своей входной очереди. И если этот sleep будет долгим, то будут тормоза, а если коротким - то тоже тормоза.
Вопрос, на самом деле, касается не программирования вообще, а конкретно SBCL и Lispworks в рамках пакета port из clocc.