Вот собственно такая проблема. Порт открывается с флагами O_NOCTTY|O_NONBLOCK, т.е. по идее, блокировать родительский процесс его не должен. Для считывания данных с порта используется select.
Родительский процесс общается с портом нормально, но как только запускается нить, обращения из нее к порту блокируются. Куда копать так и не нашел (в FAQ такого нет, да и на форумах что-то не нашел).
[Решено] Последовательный порт и pthread (нить не имеет доступа к /dev/ttyS0)
Модератор: Модераторы разделов
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
[Решено] Последовательный порт и pthread
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
Женя Подсыпальников
- Сообщения: 482
Re: [Решено] Последовательный порт и pthread
А два раза в одной и той же главной нити - отчиняется ? 
Пойдём на рыбалку !
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: [Решено] Последовательный порт и pthread
Женя Подсыпальни... писал(а): ↑03.08.2009 12:30А два раза в одной и той же главной нити - отчиняется ?
???
В смысле?
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
Женя Подсыпальников
- Сообщения: 482
Re: [Решено] Последовательный порт и pthread
Если вторичная нить открывает порт второй раз,
и такое повторное открытие не сработает и в главной нити,
то слово "pthread", наверное, в заголовке лишнее
Предположим, однако,
что вторая нить получает существующий дескриптор порта,
не открывая его второй раз, но тожа навешивая select (так там ?) -
тада, возможно, будет конкуренция на событие
А как на самом деле осуществлён подел порта
и обращения к нему - меж нитями ?
и такое повторное открытие не сработает и в главной нити,
то слово "pthread", наверное, в заголовке лишнее
Предположим, однако,
что вторая нить получает существующий дескриптор порта,
не открывая его второй раз, но тожа навешивая select (так там ?) -
тада, возможно, будет конкуренция на событие
А как на самом деле осуществлён подел порта
и обращения к нему - меж нитями ?
Пойдём на рыбалку !
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: [Решено] Последовательный порт и pthread
Решение оказалось простым: действительно, родительский процесс пытался считывать данные из порта во время записи их туда нитью, так что получился конфликт select'ов. В нити порт заново не открывался - передавался дескриптор уже открытого порта. В общем, т.к. связываться с семафорами всякими мне не хотелось, просто добавил флаг, устанавливающийся в единицу при работе дочерней нити и сбрасывающийся при выходе из нее. Родительская нить, соответственно, при установленном флаге к порту не обращается (изначально так и задумывалось, но про флаг я забыл - так что я ССЗБ
).
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: [Решено] Последовательный порт и pthread
eddy писал(а): ↑03.08.2009 16:20Решение оказалось простым: действительно, родительский процесс пытался считывать данные из порта во время записи их туда нитью, так что получился конфликт select'ов. В нити порт заново не открывался - передавался дескриптор уже открытого порта. В общем, т.к. связываться с семафорами всякими мне не хотелось, просто добавил флаг, устанавливающийся в единицу при работе дочерней нити и сбрасывающийся при выходе из нее. Родительская нить, соответственно, при установленном флаге к порту не обращается (изначально так и задумывалось, но про флаг я забыл - так что я ССЗБ).
а если в тот момент когда родительский поток прочтет флаг, обнаружит что он сброшен и начнет выполение, дочерний поток возобновит работу? или дочерний поток сразу после работы с портом уничтожается?
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: [Решено] Последовательный порт и pthread
Дочерний поток уничтожается сразу после выполнения своей функции, родительский возобновляет работу с портом.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка