LINUX.ORG.RU

ком порт и потоки


0

0

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

и возможно ли закрыть дескрипор (например родителем) не блокируя потоки чтения-записи

(язык СИ)


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

Ет полностью зависит от конкретной задачи

>и возможно ли закрыть дескрипор (например родителем) не блокируя потоки чтения-записи

Не понял.

дескриптор закрытый в одном потоке будет закрыт для _всех_ потоков в текущем процессе

cvv ★★★★★
()
Ответ на: комментарий от cvv

>>Ет полностью зависит от конкретной задачи

вопрос по поводу взаимодейстивия потоков, одновременное обращение к одному ресурсу (дескриптору ком порта)

>>дескриптор закрытый в одном потоке будет закрыт для _всех_ потоков в текущем процессе

Мне это и нужно только не возникнет ли проблем с потоком если он в момент закрытия дескриптора будет к нему обрашаться (например писать в него большой буффер. вернет ли ф-ция write(...) -1 или есть вероятность что произойдет зависание)

CL
() автор топика
Ответ на: комментарий от CL

>>>Ет полностью зависит от конкретной задачи

>вопрос по поводу взаимодейстивия потоков, одновременное обращение к одному ресурсу (дескриптору ком порта)

Дескриптор ком порта может вести себя как _два_ ресурса не вызывая конфликтов например если один поток только пишет второй только читает. Иначе можешь использовать мьютексы или семафоры. Файловые блокировки скорее всего не покатят так как они могут усыпить _все_ потоки(немного не уверен).

>>Ет полностью зависит от конкретной задачи

вопрос по поводу взаимодейстивия потоков, одновременное обращение к одному ресурсу (дескриптору ком порта)

>>>дескриптор закрытый в одном потоке будет закрыт для _всех_ потоков в текущем процессе

>Мне это и нужно только не возникнет ли проблем с потоком если он в момент закрытия дескриптора будет к нему обрашаться (например писать в него большой буффер. вернет ли ф-ция write(...) -1 или есть вероятность что произойдет зависание)

Особых проблем в часности подвисания не возникнет. Если пишешь блок данных больше 4К то может произойти обрыв записи с возвратом количества удачно записанных байт.

cvv ★★★★★
()
Ответ на: комментарий от cvv

Большое спасибо за помошь.

И последний вопрос. Если перед закрытием дескриптора порта я вызову ф-цию tcflush() для очистки еще не переданных данных как поведет себя поток который в него пишет?

CL
() автор топика
Ответ на: комментарий от CL

> Если перед закрытием дескриптора порта я вызову ф-цию tcflush() для очистки еще не переданных данных как поведет себя поток который в него пишет?

Cкорее всего он ничего не заметит

cvv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.