私はCで共有ライブラリを書いています。C関数はスレッドセーフではないことを知っています。
私のライブラリルーチンは次のようになります。
struct lib_handle {
....
};
int lib_init(lib_handle **handle);
int lib_process(lib_handle *handle);
....
....
すべてのメソッドはlib_handle
オブジェクトへのポインタを取ります。すべての状態はこの構造内に格納されます。グローバル変数は使用されません。
各スレッドが独自のlib_handle
インスタンスを作成する場合、複数のスレッドがライブラリ関数を使用できると思います。各スレッドには独自のハンドルがあるため、everythibgは機能するはずです。
私はまだこの仮定を検証していません。皆さんがこの設計についてどう思っているのか疑問に思っています。各スレッドに独自のハンドルがある場合、ライブラリをスレッドセーフと見なすことができますか?
どんな助けでも素晴らしいでしょう!