[Решено] Последовательный порт и pthread (нить не имеет доступа к /dev/ttyS0)

Модератор: Модераторы разделов

Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

[Решено] Последовательный порт и pthread

Сообщение eddy »

Вот собственно такая проблема. Порт открывается с флагами O_NOCTTY|O_NONBLOCK, т.е. по идее, блокировать родительский процесс его не должен. Для считывания данных с порта используется select.
Родительский процесс общается с портом нормально, но как только запускается нить, обращения из нее к порту блокируются. Куда копать так и не нашел (в FAQ такого нет, да и на форумах что-то не нашел).
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: [Решено] Последовательный порт и pthread

Сообщение Женя Подсыпальников »

А два раза в одной и той же главной нити - отчиняется ? :)
Пойдём на рыбалку !
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: [Решено] Последовательный порт и pthread

Сообщение eddy »

Женя Подсыпальни... писал(а):
03.08.2009 12:30
А два раза в одной и той же главной нити - отчиняется ?

???
В смысле?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: [Решено] Последовательный порт и pthread

Сообщение Женя Подсыпальников »

Если вторичная нить открывает порт второй раз,
и такое повторное открытие не сработает и в главной нити,
то слово "pthread", наверное, в заголовке лишнее :)

Предположим, однако,
что вторая нить получает существующий дескриптор порта,
не открывая его второй раз, но тожа навешивая select (так там ?) -

тада, возможно, будет конкуренция на событие :)

А как на самом деле осуществлён подел порта
и обращения к нему - меж нитями ?
Пойдём на рыбалку !
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: [Решено] Последовательный порт и pthread

Сообщение eddy »

Решение оказалось простым: действительно, родительский процесс пытался считывать данные из порта во время записи их туда нитью, так что получился конфликт select'ов. В нити порт заново не открывался - передавался дескриптор уже открытого порта. В общем, т.к. связываться с семафорами всякими мне не хотелось, просто добавил флаг, устанавливающийся в единицу при работе дочерней нити и сбрасывающийся при выходе из нее. Родительская нить, соответственно, при установленном флаге к порту не обращается (изначально так и задумывалось, но про флаг я забыл - так что я ССЗБ :) ).
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: [Решено] Последовательный порт и pthread

Сообщение RasenHerz »

eddy писал(а):
03.08.2009 16:20
Решение оказалось простым: действительно, родительский процесс пытался считывать данные из порта во время записи их туда нитью, так что получился конфликт select'ов. В нити порт заново не открывался - передавался дескриптор уже открытого порта. В общем, т.к. связываться с семафорами всякими мне не хотелось, просто добавил флаг, устанавливающийся в единицу при работе дочерней нити и сбрасывающийся при выходе из нее. Родительская нить, соответственно, при установленном флаге к порту не обращается (изначально так и задумывалось, но про флаг я забыл - так что я ССЗБ :) ).

а если в тот момент когда родительский поток прочтет флаг, обнаружит что он сброшен и начнет выполение, дочерний поток возобновит работу? или дочерний поток сразу после работы с портом уничтожается?
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: [Решено] Последовательный порт и pthread

Сообщение eddy »

Дочерний поток уничтожается сразу после выполнения своей функции, родительский возобновляет работу с портом.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали: