ZMQ套接字不是线程安全的,但是我可以在不同的线程中使用zmq_send()和zmq_recv()吗?

时间:2017-10-26 03:46:21

标签: multithreading zeromq

我知道ZMQ不是线程安全的。

但我想使用一个线程接收数据:zmq_poll()等待数据来,然后使用zmq_recv()接收数据;使用另一个线程发送数据:zmq_send()

我想知道这是使用ZMQ的正确方法吗? 事实上我已经尝试过了。调用zmq_poll()一次时程序核心转储,但它只发生一次而不能再出现。

2 个答案:

答案 0 :(得分:2)

好吧,没有人可以阻止你尝试这个想法。

尽管如此,所有ZeroMQ众神和巫师都违背了你的愿望。

如果您确实知道自己打算做什么,以便处理所有多线程歧义,那么您可以自己去尝试。

如果要求这个" 是否是使用ZeroMQ的正确方法?",请不要指望答案违反了所有表达的文档警告不要这样做。

无论如何,享受像ZeroMQ这样的优秀工具,用于设计智能,可扩展,低延迟,高性能的分布式异构系统。

答案 1 :(得分:0)

ZMQ Context是单个进程中所有套接字的容器,当然是线程安全的。 ZMQ套接字不是线程安全的,它们不应在线程之间共享。因此,ZMQ指南建议为每个线程创建一个专用的inproc套接字。这为您提供了一种非常简单而强大的方法,可以在一个进程中连接线程,而无需复杂的线程同步机制。