2

私のプログラムは、通信に ZMQ を使用しています。つまり、サーバー (C++、Linux) が XPUB ソケットを作成し、1 つのスレッドでそれを読み取り、別のスレッドでデータを公開 (書き込み) します。

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

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

問題の原因は何ですか? 異なるスレッドで読み書きするか、XPUB/SUB ペアを作成しますか?

問題がマルチスレッドにある場合、XPUB ソケットを使用する正しいパラダイムは何ですか?

4

1 に答える 1

4

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

スレッド間で ZeroMQ ソケットを共有しないでください。ZeroMQ ソケットはスレッドセーフではありません。技術的には、あるスレッドから別のスレッドにソケットを移行することは可能ですが、スキルが必要です。スレッド間でソケットを共有することがリモートで妥当な唯一の場所は、ソケットでガベージ コレクションのような魔法を行う必要がある言語バインディングです。

于 2016-04-30T14:41:15.637 に答える