どのアプローチが良いかを知りたいのですが、一連のodbc接続をスレッド間で共有したり、mutexを使って同意問題がないことを確認したり、 mutexを使用しないでください。私はそれらのいずれかの実質的な利点はありませんが、多分私は行方不明のODBC実装のものがあります。ODBCシングルコネクションまたはスレッドごとに1つ
それは
どのアプローチが良いかを知りたいのですが、一連のodbc接続をスレッド間で共有したり、mutexを使って同意問題がないことを確認したり、 mutexを使用しないでください。私はそれらのいずれかの実質的な利点はありませんが、多分私は行方不明のODBC実装のものがあります。ODBCシングルコネクションまたはスレッドごとに1つ
それは
前に回答されていた場合、私は、私はそれはあなたがあなたの実装では達成したいのかに依存していることを考えると類似の質問を探してみましたが、何かを見つけることができませんでした、申し訳ありません。多くのスレッドと共有接続を1つしか持たないと、スレッドがブロックされ、接続が利用可能になるのを待つことになります。これにより、パフォーマンスが低下する可能性があります。スレッド数が多い場合は、接続の作成、使用、および終了を処理する一種の接続プールを作成したいと考えています。
ODBCドライバ・マネージャが既に接続プーリングを提供します:https://msdn.microsoft.com/en-us/library/ms716319(v=vs.85).aspx
接続プーリングは、それぞれの使用のために再確立する必要はありません接続の プールからの接続を使用するようにアプリケーションを可能にします。
要約:アプリケーションによってConnectionが解放され、接続プーリングが有効になっている場合、ドライバマネージャは直ちに接続を閉じることはできませんが、しばらく開いておいてください。アプリケーションが新しい接続を開くように要求した場合、ドライバマネージャはプールから既に開いている接続を返します。
So:スレッド内のすべてのロックを気にせずに、接続プーリングを有効にして、各ドライバが独自の接続を使用できるようにします。
は に SQL_ATTR_CONNECTION_POOLING環境属性を設定するにSQLSetEnvAttrを呼び出すことにより、接続プーリングを有効にします:ドキュメントの発言を参照してください - あなたは、プロセスレベルまたは各環境ハンドルの接続プールを有効にするかということ
注意SQL_CP_ONE_PER_DRIVERまたはSQL_CP_ONE_PER_HENV。
私はスレッドごとに1つのアプローチを使用すると思います。ありがとう! –
これは答えではなく、コメントです。 – Olaf