[zeromq-dev] ZeroMQ thread safety (or not)

Pieter Hintjens ph at imatix.com
Fri Feb 12 14:22:51 CET 2016


You can move sockets from one thread to another if you do the right magic.

We're developing a new family of sockets (client-server, radio-dish)
that are fully threadsafe.

On Fri, Feb 12, 2016 at 1:47 PM, Alex Bligh <alex at alex.org.uk> wrote:
> I am attempting to write a Go Channel wrapper (similar to vaughan0's work but working on top of the pebbe's go bindings), as I'm using zmq in an environment where I will often want to use a golang 'select' mixing zmq sockets and other golang channels. I have a question about thread safety.
>
> The ZeroMQ guide says: "Remember: Do not use or close sockets except in the thread that created them.". I want to know whether this is in fact a prohibition.
>
> In Vaughan0's GoLang bindings, the MakePair function creates a pair of PAIR sockets in one thread:
>   https://github.com/vaughan0/go-zmq/blob/master/util.go#L24
>
> Each end of this pair is then passed to a different goroutine (thread-ish) here:
>   https://github.com/vaughan0/go-zmq/blob/master/channels.go#L34
>
> (i.e. ProcessOutgoing uses outsock, ProcessSockets uses insock)
>
> This is a pretty useful thing to do. Is it permissible?
>
> Specifically is the following pattern permissible?
>
>      Thread 1                    Thread 2
>      ========                    ========
>
>      Create socket
>      Connect() / Bind()
>      Pass details to thread 2
>      Never access socket again
>                                  Use socket to read/write
>                                  Close socket
>
> This is essentially what the vaughan0 golang bindings are doing.
>
> I understand completely that using the same socket in two threads at once is NOT permissible. However, unless the sockets are using thread local variables (which is going to be problematic in go as the same goroutine can be scheduled between different OS threads) I can't immediately see why the above would not work.
>
> --
> Alex Bligh
>
>
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev



More information about the zeromq-dev mailing list