我的程序使用ZMQ进行通信。也就是说,服务器(C ++,linux)创建一个XPUB套接字,然后在一个线程中读取它,在另一个线程中发布数据(写入)。
客户端(java,jzmq,linux)创建一个SUB套接字,并使用它进行订阅。
一段时间后,服务器端在阅读主题中收到SIGABRT。
可能是问题的根源?在不同的线程中读/写或创建XPUB / SUB对?
如果问题出在多线程中,那么使用XPUB套接字的正确范例是什么?
答案 0 :(得分:3)
http://zguide.zeromq.org/page:all#Multithreading-with-ZeroMQ
不要在线程之间共享ZeroMQ套接字。 ZeroMQ套接字不是 线程安全的。从技术上讲,可以从一个套接字迁移套接字 线程到另一个,但它需要技巧。它唯一的地方 远程理智,以便在线程之间共享套接字 需要像套接字上的垃圾收集那样做魔术的绑定。