Действительно ли безопасно читать и записать в последовательный порт одновременно через различные потоки?

Существует сетевой инструмент поиска кода Google - http://www.google.com/codesearch

, я пробую к материалу поиска путем выполнения чего-то как "lang:java общедоступное перечисление"

пример от Sun

9
задан Taylor Leese 28 September 2009 в 18:48
поделиться

3 ответа

Из документации SerialPort :

Любые общедоступные статические (общие в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасность любых членов экземпляра не гарантируется.

Поскольку чтение и запись не являются статическими, они не будут потокобезопасными. В любом случае это очень плохая идея, поскольку класс SerialPort поддерживает для вас внутренние буферы.

Вам необходимо синхронизировать ввод-вывод с вашим последовательным портом.

5
ответ дан 4 December 2019 в 13:48
поделиться

Чтение и запись в последовательный порт «одновременно» из разных потоков - это стандартный способ обработки связи через последовательный порт: один поток выполняет чтение, а другой - запись. Приемлемо.

Существует ряд устройств с последовательным интерфейсом, которые асинхронно отправляют данные на хост-машину, при этом позволяя отправлять команды на само устройство: такие устройства, как сканеры штрих-кода, сканеры тегов и камеры.

Проблемы?

Проблемы возникают при попытке синхронизировать обмен данными с устройством.

Например, вы хотите написать команду, а затем немедленно прочитать любой ответ. Что ж, в этом случае вы должны приостановить поток чтения и вручную прочитать все данные последовательного порта после записи команды. После обработки команды

8
ответ дан 4 December 2019 в 13:48
поделиться

Я ожидал, что описанный вами конкретный случай с 1 потоком чтения и 1 потоком записи будет безопасным.

Каналы чтения и записи на оборудовании предназначены для использования в полнодуплексном режиме, и программное обеспечение также должно поддерживать это.
И хотя я не смог найти явного заявления об этом, пример на странице MSDN для SerialPort также записывает из основного потока, а читает из другого. Без блокировки.

2
ответ дан 4 December 2019 в 13:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: