3

私は Android 開発の初心者です (C/C++ の専門家でもありません) が、Android アプリで (他のプラットフォームの中でも) 使用されることになっている C で記述されたネイティブ共有ライブラリに取り組んでいます。

今、私はスレッド セーフについて考え始め、私のライブラリは現在スレッド セーフではない (静的/グローバル変数を使用している) と判断しました。問題ありません。1 つのスレッドから使​​用するだけです。

ここから私の実際の質問が始まります。インターネット上のいくつかの投稿 (たとえば、Launchpadなど) によると、バイオニック libc の一部 (特に stdio) は、少なくとも一部の Android リリースではスレッドセーフではないようです (まだ 3.0 より前をターゲットにしています)。つまり、このアプリ/プロセスで使用される他のネイティブ ライブラリは同じ libc インスタンスを共有し、スレッド セーフの問題を引き起こしますか? それとも、すべての共有ライブラリが独自の libc インスタンスを取得しますか?

libc がすべての共有ライブラリ間で共有されている場合、どの部分がスレッド セーフで、どの部分がそうでないかに関する情報はどこにありますか? 安全のために、同じスレッドのすべてのネイティブ ライブラリを使用する必要がありますか?

編集:私の現在の理解で更新:bionic libcは完全にスレッドセーフであると想定されており、上記の問題はほとんどの状況で発生しない孤立したバグです(多くのMTバグのように)。疑問は残りますが、私の推測では、プロセス全体が同じ libc インスタンスを共有しているということです。これは後でテストしてみます。

4

0 に答える 0