3

我是 Android 开发新手(也不是 C/C++ 专家),但我发现自己正在研究一个用 C 编写的本机共享库,该库应该由 Android 应用程序(在其他平台中)使用。

现在,我开始考虑线程安全,并确定我的库当前不是线程安全的(使用静态/全局变量)。没问题,我只会从一个线程中使用它。

这是我的实际问题开始的地方。从互联网上的一些帖子(例如在 Launchpad 上,似乎仿生 libc 的某些部分(特别是 stdio)也不是线程安全的,至少在某些 Android 版本中(我们仍然针对 3.0 之前的版本)。现在的问题是,此应用程序/进程中使用的其他本​​机库是否会共享相同的 libc 实例,从而导致线程安全问题,或者每个共享库是否都有自己的 libc 实例?

如果 libc 在所有共享库之间共享,我在哪里可以找到关于它的哪些部分是线程安全的以及哪些不是线程安全的信息?为了安全起见,我是否必须使用同一线程中的所有本机库?

编辑:根据我目前的理解进行更新:仿生 libc应该完全是线程安全的,上面显示的问题是一个孤立的错误,在大多数情况下不会发生(如许多 MT 错误)。问题是存在的,但我最好的猜测是整个进程共享同一个 libc 实例。稍后我将尝试对此进行测试。

4

0 回答 0