我遇到了由多线程和 Android Open Accessory 引起的问题。
我需要与 USB 附件通信,但我需要从 2 个线程进行通信。一个线程生成并发送数据,另一个线程读取数据。
-
为什么我不使用单线程?因为在读取之前可能有 1 次或多次写入,并且读取是阻塞的,所以这不是一个选项。
-
如果使用多个线程,我迟早会遇到“I/O 错误(没有这样的设备)”,因为同时执行的读取和写入之间会发生冲突。
-
锁定或多或少会让我回到单线程情况,所以不好。
-
.available()
方法上的input-stream
不支持返回,因此我无法在读取之前检查是否有可用的内容
-
由于它不是基于套接字的流,我也无法设置超时。
-
我尝试过获得FileDescriptor
来自USBAccessory
并传递到JNI
在那里处理它,但在第一次读/写后,设备变得无法访问。
需要的问题/建议:
建议/最佳实践方法是什么?我不期望编写代码,我只需要一些关于如何解决这个问题的指导。
澄清:
另一端的软件可能会也可能不会响应任何数据。有一些所谓的静默发送,即发送的数据刚刚收到,但没有 ACK。由于我正在开发的应用程序只是一个代理,因此我不清楚数据是否会产生答案。这还需要对数据进行分析,而目前这些数据还没有记录在案。
当您想要并行进行读取和写入时,如果读取与写入位于同一部分,则写入总是会导致读取暂停。
也许你可以遵循类似的方法ConcurrentHashMap
并对不同的段使用不同的锁,并且仅当写入位于同一段上时才锁定读取,否则允许读取发生。
这会
- 大多数情况下避免写入期间阻塞读
- 避免碰撞和
- 绝对不会是单线程方法。
希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)