私は、HTTPSトランスポートにOpenSSLを使用し、スレッド化にpthreadを使用して、Ubuntu上のC++でSOAPクライアントアプリケーションを作成しています。私はいくつかのスレッドを持っています-1つの中央データ取得スレッドは定期的にワーカースレッドを取得して、共有ミューテックスで保護されたキューを介してSOAPリクエストを作成します。
私が見つけたOpenSSLのドキュメントを読むOpenSSLはスレッドセーフですか?OpenSSLを使用するときにスレッドセーフを確保するために必要なメカニズムについて説明しているOpenSSLFAQにあります。私はこれを実装し、すべて正常に動作します。
私の質問の理由は本当に概念的な難しさです。私は自分のアプリケーションがすでに持っているのと同じ機能を実装することを考えていましたが、スレッドを使用する代わりに、2つの別々のアプリケーションを作成しました。1つはワーカースレッド(複数のコピーが実行されます)用で、もう1つはメインデータ取得スレッド用です。次に、ミューテックスで保護されたキューではなく、TCPソケットを使用して2つの間で通信します。これは悪い考えかもしれませんが、それはそれほど重要ではありません-私を混乱させるのは、この2番目のアプローチでOpenSSLスレッドセーフを確保するために必要な同じ関数を実装する必要があるかどうかです。
私の推測では、そうする必要はなく、独立したものとして扱うことができます(確かに、多くのアプリケーションがOpenSSLを使用しているのと同じくらいでなければなりません)が、その理由は何ですか?共有ライブラリコードを使用する複数のアプリケーションと、同じコードを共有する複数のスレッドの違いは何ですか? 私はここ数年マルチスレッドアプリケーションをうまく作成してきましたが、この質問に対する答えを思い付くことができないのではないかと心配しています。