android - Android 库中的线程安全

标签 android thread-safety shared-libraries android-library bionic

我正在尝试为 Android 系统实现 native 共享库 (.so)。自然地,有些代码块需要线程安全。

我发现了 here不支持 pthreads 锁、互斥锁或条件变量。

我想知道在库级别通常使用什么来实现线程安全?

最佳答案

这如何实现取决于您是希望它在被 Java 级线程访问时是线程安全的,还是需要将 native 线程与 Java 线程同步。

有两种方法可以只同步 Java 级别的线程:

1.最简单的方法是在多线程访问的native方法中加上synchronized关键字,即

public native synchronized int sharedAccess();

2.从原生端同步:

(*env)->MonitorEnter(env, obj);
...                      /* synchronized block */
(*env)->MonitorExit(env, obj);

引用here关于如何将 native 线程与 Java 线程同步

关于android - Android 库中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25775260/

相关文章:

android - Alert.Dialog 生成器代码无法访问

java - 我应该在单例中使用哪个android上下文?

c# - 队列的并行处理

java - 通过引用延迟初始化的非 volatile 字符串进行访问是线程安全的吗?

c - 如何在可能已依赖于 SDL 的程序使用的库中初始化 SDL?

android - 无法加载类的模块适配器。请确保已为此模块运行代码生成

android - 如何在android中的sdcard中创建文件夹

c# - 在返回 IEnumerable 的方法中使用锁时,linq 延迟执行

class - 使用 Jenkins 共享库作为类

ubuntu - 编译caffe : libpng and libgfortran not found,共享库时出现ld错误