-4

pthread_mutex_t構造体に新しいフィールドを追加したい。pthread.hこの目的のためにヘッダーファイルを変更するだけで十分ですか? しかし、コンパイラに同梱されているヘッダー ファイルを改ざんすることになるため、これは良い考えではないと思います。

そうする他の方法は何ですか?

私は LD_PRELOADing を行ってpthread_mutex_lockおり、私のカスタムpthread_mutex_lockでは 内に 1 つの追加フィールドが必要なため、これを行っていpthread_mutex_tます。確かに 以外の構造を使用するようにコードを書くことはできますがpthread_mutex_t、ユーザーにそのプログラムを変更してほしくありません。

4

2 に答える 2

4

構造に依存する可能性のあるすべてpthread_mutex_tのものを再コンパイルせずに構造を拡張する方法はありません。これは、すべてのシステム ライブラリ、サードパーティ ライブラリ、およびアプリケーションを意味します。これを回避する方法はありません。

これを行うことで解決しようとしている実際の問題を説明していただけますか? そうすれば、誰かがあなたに納得のいく答えを与えることができるかもしれません。

于 2012-06-03T18:18:09.593 に答える
0

これはロングショットです。しかし、次のようなことができます。

struct my_pthread_mutex_t {
   pthread_mutex_t mutex;
   ...
   /* insert fields here */
   ...
};

これにより、 と で同じアドレスを使用できるようになりpthread_mutex_tますmy_pthread_mutex_t。したがって、関数がこれを認識してhackいる場合 (つまり、構造体宣言がスコープ内にある場合)、my_pthread_mutex_t にキャストできます。それ以外の場合は、単純な pthread_mutex_t と同じものを使用できます。

プラスは、このように構造を拡張することで、コードを再コンパイルする必要がないことです。pthread_mutex_t

于 2012-06-03T23:53:17.327 に答える