ØMQ的文档提到:
Individual ØMQ sockets are not thread safe except in the case where full memory barriers are issued when migrating a socket from one thread to another.
“完全内存屏障”到底是什么意思?如果我将此与互斥量同步,是否可以让多个线程通过同一个 ØMQ 套接字发送数据?
最佳答案
正如 Ulrich 所说,是的,您可以使用互斥锁同步对单个线程的访问,但实际上,您为什么要这样做?
仅从单个线程访问套接字并使用消息在线程之间进行同步通常被认为是一种好的做法。像这样:
Worker thread 1
\
Worker thread 2 - > Control thread -> msg out
/
Worker thread 3
只有控制线程可以直接通过套接字发送消息。来自工作线程的消息将通过您创建的 inproc zmq 套接字发送到控制线程。控制线程一次只处理一条消息,这避免了对互斥体的需要,前提是工作人员没有共享状态。
基于消息的设计比使用互斥锁的设计更容易实现和调试,也更容易维护。如果您可以更改设计来做到这一点,我建议您这样做。
关于当使用互斥量时,多个线程可以通过单个 ØMQ 套接字发送吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178622/