基本的なAPIを公開し、アプリケーションの カップルで使用するマルチスレッドダイナミックライブラリがあります。現在、私はいくつかの基本的なスレッディングと同期プリミティブのカスタム(従来のように)実装を使用しています。このプリミティブでは、多大な柔軟性や機能を提供していないし、保守も面倒です(両方とも実装していますLinuxおよびWindows)。C++オブジェクトを動的にロードしてラッパーインターフェイスを使用する方法
これを既存のスレッドライブラリに置き換えたいと思いますが、いくつかの柔軟性を提供したいと思います。つまり、私が構築したさまざまなプラットフォームでどのように実行するかを見てみましょう私のライブラリは(私はboost :: thread、Poco :: Threadと新しいC++の0Xスレッドの実装を試してみたい)、もし望むなら自分のライブラリのカスタム実装に合わせてライブラリを提供することもできますライブラリとユーザーのアプリケーションが同じスレッドインフラストラクチャを使用できるようにすることができます。ユーザーが希望の実装を指定できるように、または既定で提供されているものを使用できるようにするには、設定ファイルなどが必要です。
私は、次のことを考えていました:
- 、実行時に必要な実装に合わせて動的にクラスローダを使用しますマイライブラリ内で使用する薄いラッパー(PIMPLスタイル)を作ります。しかし、どうすればC++の0Xスレッドのケースを処理できますか?これらは標準ライブラリーにあり、ライブラリーに対して既にリンクされているので、実行時にカスタムをロードすることはできません。プロトタイプのデザインパターンと結合されたダイナミックローダーを使用している。しかし、このパターンでは、スレッドライブラリコードの変更を意味する、メソッドの実装が必要です。私はパターンをよく理解していないかもしれませんが、私はこれについて間違っているかもしれないので、間違っていれば私を修正してください。
あなたは私が今で動作するように多くのアイデアを持っていない(しかし、それはスタートだ)ので、次のいずれかのポインタが大きな助けになるだろう見ることができるように:
- は、このようなAを提供されています機能は良いアイデアですか?あなたは注意点を見ますか?
- ダイナミックローディング機能は実現可能なアイデアですか?何が欠点ですか? これを正しく実装するためのポインタ/リンクはありますか?
- 「薄いラッパー」の方法では、ライブラリのAPIの一部として公開することをお勧めしますか?
- 同じ種類の機能を実現するための選択肢やパターンがありますか(同じ結果が得られますが、動的ロードがないことを意味します)。
マルチスレッド・プリミティブ(mutexes、semaphores、スレッド・ハンドルなど)は、特定のライブラリで実装されていない機能を補うために使用することもできます(ライブラリで提供されるmutexを使用してリーダ/等)があなたの図書館のAPIを通過しましたか?ライブラリで使用される基本的なスレッドプリミティブは、ライブラリのユーザに完全に隠されていますか? –
"あなたのライブラリで使用されている基本的なスレッドプリミティブは、あなたのライブラリのユーザーに完全に隠されていますか?"それは私の質問の1つでした...スレッディングAPIも公開するのは意味がありますか?最初は、実行時にそれらを切り替えることができて嬉しいです。 – celavek
@cevalek:私が言ったのは、ミューテックス、スレッドハンドルなどの**インスタンス**は、完全にライブラリによって管理され、ライブラリユーザには見えませんか? –