gpt4 book ai didi

java - Android USB 配件多线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:40 26 4
gpt4 key购买 nike

我遇到了由多线程和 Android Open Accessory 引起的问题。

我需要与 USB 附件通信,但我需要从 2 个线程进行通信。一个线程生成并发送数据,另一个线程读取数据。

  • 为什么我不使用单线程?因为在读取之前可能有 1 次或多次写入,并且读取是阻塞的,所以这不是一个选项。

  • 如果使用多线程,我迟早会遇到“I/O Error (No such device)”,因为同时执行的读和写之间会发生冲突。

  • 锁定或多或少会让我回到单线程的情况,所以不好。

  • 不支持 input-stream 返回的
  • .available() 方法,因此我无法在读取之前检查是否有可用内容

  • 因为它不是基于套接字的流,所以我也无法设置超时。

  • 我尝试从 USBAccessory 获取 FileDescriptor 并传递给 JNI 在那里处理它,但是在第一次读取之后/write 设备变得不可访问。

需要问题/建议:
什么是建议/最佳实践方法?我不希望编写代码,我只需要一些关于如何解决这个问题的指导。

澄清:
另一端的软件可能会或可能不会响应任何数据。有一些所谓的静默发送,发送的数据刚收到但没有 ACK。由于我正在使用的应用程序只是一个代理,所以我不清楚数据是否会产生答案。这也需要对数据进行分析,目前还没有这些数据。

最佳答案

因为你想并行地进行读写,如果读和写在同一部分,写总是会导致读暂停。

也许您可以采用与 ConcurrentHashMap 类似的方法,并为不同的段使用不同的锁,并且仅当写入在同一段上时才锁定读取,否则允许读取发生。

这将

  1. 在大多数情况下避免在写入期间阻塞读取
  2. 避免碰撞和
  3. 绝对不会是单线程方法。

希望对您有所帮助。

关于java - Android USB 配件多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50864401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com