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 <a...@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@lists.zeromq.org > http://lists.zeromq.org/mailman/listinfo/zeromq-dev _______________________________________________ zeromq-dev mailing list zeromq-dev@lists.zeromq.org http://lists.zeromq.org/mailman/listinfo/zeromq-dev