2016-04-30 22 views
1

私のプログラムは、通信にZMQを使用しています。つまり、サーバ(C++、linux)はXPUBソケットを作成し、あるスレッドでそれを読み込み、別のスレッドではデータ(書き込み)を発行します。マルチスレッド環境でZMQを使用する正しい方法は?

クライアント(java、jzmq、linux)は、SUBソケットを作成し、それを使用してサブスクライブします。

しばらくすると、サーバー側は読み取りスレッドでSIGABRTを受信します。

何か問題が発生する可能性がありますか?異なるスレッドでの読み取り/書き込み、またはXPUB/SUBペアの作成?

問題がマルチスレッド化されている場合、XPUBソケットを使用するための正しいパラダイムは何ですか?

+0

StackOverflowは、質問された問題を示すMCVEコードの慣習により高品質の質問を策定することを推奨しています。そうしないと、推測するだけで他の変更が残されます。そのようなMCVEコードを使って投稿を更新してください。 ZeroMQは、分散(非共有)とスマート共有(中央)Context(インスタンス)製作ソケットScalable Formal Communicationアーキタイプの豊富なシグナリング/メッセージングレイヤーを構築するのに優れていますが、**一部では 'SIGABRT '私のコードデプロイメントの**は、StackOverflowコミュニティの知識よりも、Clairvoyanceサイトに適しています。 – user3666197

答えて

2

http://zguide.zeromq.org/page:all#Multithreading-with-ZeroMQ

スレッド間ZeroMQソケットを共有しないでください。 ZeroMQソケットは スレッドセーフではありません。技術的には、あるソケットをあるスレッドから別のソケットに移行することは可能ですが、それには熟練が必要です。 スレッド間でソケットを共有するために離れているのは、 のソケットでガベージコレクションのような魔法を必要とする言語の バインディングです。

関連する問題