[zeromq-dev] Perennial thread safety question
Matthew Woehlke
matthew.woehlke at kitware.com
Tue Apr 9 00:04:26 CEST 2013
On 2013-04-08 16:12, Charles Remes wrote:
> On Apr 8, 2013, at 12:40 PM, Matthew Woehlke wrote:
>> Is it safe to create and set up, and tear down, my 0MQ socket in the
>> ctor/dtor (i.e. in thread A, and poll/recv/etc. in thread B)? Is there
>> something I should be doing to make it safe?
>
> This is answered in the FAQ (http://www.zeromq.org/area:faq). Short answer is: Yes, go ahead and do this. If it crashes, protect the socket with some kind of memory barrier (e.g. mutex).
Ah... I think I may have seen that at some point. However I was
specifically remembering reading this in the guide:
"Don't share ØMQ sockets between threads. ØMQ sockets are not
threadsafe. Technically it's possible to migrate a socket from one
thread to another but it demands skill. The only place where it's
remotely sane to share sockets between threads are in language bindings
that need to do magic like garbage collection on sockets."
...which seems to contradict the FAQ. Maybe some less scary text should
be used? (As I read the FAQ, it's perfectly safe to migrate a socket
just as long as the migration is 'clean', e.g. memory gets synchronized
between the last access by thread A and before the first access by
thread B.)
--
Matthew
More information about the zeromq-dev
mailing list