1

ご存知のように、Linux の libpthread では、32 ビット モードと 64 ビット モードでミューテックスのサイズが異なります。同じ Linux ボックスで実行されている 32 ビット アプリと 64 ビット アプリの間で、共有メモリ内のミューテックスを共有することはできません。(これについて間違っていたら、訂正してください。)

32 ビットと 64 ビットのアプリを同時にサポートするために、Linux で futex を使用して独自のミューテックス ライブラリを実装しようとしています。つまり、このミューテックスは、ライブラリが 32 ビットまたは 64 ビットにコンパイルされているかどうかに関係なく、同じサイズと構造を持ちます。

さらに、「堅牢なミューテックス」もサポートしたかったのですが、ここに問題があると考えています。私の知る限り、glibc/libpthread は各 pthread の「robust_list」を作成し、すべての pthread ミューテックスのrobust_list を維持します。これは、カーネルの堅牢なリスト関数と連携して、アプリの堅牢なミューテックスをサポートします。

私の質問は、自分のミューテックスを glibc/libpthread によって管理されている同じ「robust_list」にアタッチすることは可能ですか? そうでない場合、別の堅牢なリストを使用して、新しいリストをカーネルに渡す必要がありますか? 自分のリストを転がすと、アプリはもう -pthread を使用できなくなるのではないかと思います。つまり、自分のミューテックス コードは、アプリの glibc pthread と共存できません。

コメントやアドバイスをいただければ幸いです。

ありがとう。

4

0 に答える 0