Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否需要将以下场景视为关键场景?_Java_Android_Aidl_Hal_Hidl - Fatal编程技术网

Java 我是否需要将以下场景视为关键场景?

Java 我是否需要将以下场景视为关键场景?,java,android,aidl,hal,hidl,Java,Android,Aidl,Hal,Hidl,我有Android java服务,它将使用HIDL调用与HAL服务交互 我有以下情况,我不确定是否将其视为关键 +----------+ (AIDL) +--------------+ |App thread|-------->|Java Service | (HIDL) +-----------+ +----------+ |(SendFunction)|------->|CPP service| +--------

我有Android java服务,它将使用
HIDL
调用与
HAL
服务交互

我有以下情况,我不确定是否将其视为关键

+----------+  (AIDL) +--------------+
|App thread|-------->|Java Service  | (HIDL) +-----------+
+----------+         |(SendFunction)|------->|CPP service|  
                     +--------------+        +-----------+
                     ^
+--------------+     |
|AnotherThread |-----|
+--------------+
send函数的定义如下所示

 private void SendFunction(int status, DiagCommandDesc response) {
      try {
          server.executeCommandResponse(status, response);
         if (Log.isLoggable(TAG, Log.DEBUG)) {
              Log.d(TAG, "Response sent to HAL.");
          }
      } catch (Exception e) {
          if (Log.isLoggable(TAG, Log.DEBUG)) {
             Log.d(TAG, "HAL Server error.");
         }
      }
  } 
正在从两个不同的线程调用
SendFunction
。 其中,
server
是使用
HIDL
CPP服务器的实例

我的问题

      server.executeCommandResponse(status, response);

我是否需要将上述
调用
视为关键并同步它?由于将从两个不同的线程访问
server
对象。

否,您不必在Java服务中保护对
server.executeCommand响应(状态、响应)
的调用

活页夹通信已经是线程安全的。对
executeCommandResponse
的并发调用在HAL服务中是安全的,必须由HAL本身来确保。在HAL方面,有一种简单的方法可以确保线程安全:只使用一个线程池。不过,这将使所有其他线程等待第一个线程完成

intmain()
{
::android::hardware::configureRpcThreadpool(1,true);
::安卓::sp服务=新迈哈尔;
如果(::android::OK!=服务->注册服务())
返回退出失败;
::android::hardware::joinRpcThreadpool();
返回退出成功;
}
您可以在此处找到更多信息: