首页 > 解决方案 > 在不同线程的套接字中使用 ZMQ,但不能同时使用

问题描述

我目前正在使用 ZMQ 与另一个模拟硬件的进程进行通信。然后这个消息连接到一个硬件接口类,然而这个接口假定线程安全,即使用来自不同线程的接口对象是安全的。

我完全控制了接口后端,但我不确定如何使用 ZMQ 处理这个问题。我的套接字使用 REQ/REP 模型,其他套接字使用 PUB/SUB。

想要做的只是在每个套接字周围创建一个互斥锁以停止套接字的实际并发使用,但让它们可以从多个线程中使用(因此我可以阻塞线程),但显然我必须“传输套接字” ? 我不知道这意味着什么,这样做的概念对我来说毫无意义,并且对这个问题的回答......没有帮助(关于“ZMQ之神”的长篇大论?)

这个问题的答案似乎说互斥锁算作障碍,但我不知道实际的“传输”是如何工作的,以及为什么如果受互斥锁保护,ZMQ 不允许多线程使用,以及这与这种“转移”。

我一直看到的另一种选择是“使用对套接字”。但是我不知道这应该如何工作,这似乎只是在把罐子踢下去,至少对于我的应用程序(尽管我在其他地方使用 ZMQ 对套接字,所以我并不反对他们)。基本上,接口类不知道有多少线程在调用它,什么线程在调用它,或者它在哪里被使用,所以没有办法,AFAIK,要创建对套接字,而且不会有一对的套接字,会有一个 1 : N 的关系。

标签: c++multithreadingsocketsthread-safetyzeromq

解决方案


推荐阅读