当使用互斥量时,多个线程可以通过单个 ØMQ 套接字发送吗?

标签 c concurrency mutex zeromq

Ø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/

相关文章:

c - 如何确定3个整数中的最大和最小

c++ - C:将字节数组转换为结构

multithreading - 在私有(private)/后台队列 : how to do? 上创建 NSManagedObjectContext

concurrency - 如何使用 Guava ListenableFuture 和 Futures.chain() 方法

c - 多个生产者中的 posix 线程互斥和条件变量使用

c - 工具提示控件上的透明背景

c - 未初始化字符数组的 %d 说明符

concurrency - 缓存一致性文献一般只指存储缓冲区而不是读取缓冲区。然而,不知何故,两者都需要?

c++ - std::mutex 公平吗?

multithreading - 使用 QWaitCondition 唤醒线程