Martin Hurton thanks for the comments, I made changes to fix the whitespace issue, updated commit link:
https://github.com/somdoron/libzmq/commit/9f05b68b847546c0e7ca44886ec0b8256feb9862 On Sat, Feb 7, 2015 at 2:04 PM, Doron Somech <[email protected]> wrote: > Hi All, > > I'm trying to implement the thread safety for client and server sockets. > > So far I did the safety for send and receive method and the code seems > right, however it doesn't behave exactly as I thought and I need help, > maybe I'm missing something, you can take a look at the change here (I left > the debug messages): > > > https://github.com/somdoron/libzmq/commit/403591007f61c2e9d1865be1bfe0349ec5c265d7 > > Little explanation of what I did: > > 1. When entering the recv or send method you also enter a mutex > 2. If you need to wait for messages to receive / send queue is full you > exit the mutex and wait on the signaler (eventfd with poll). > 3. When command is sent to the socket the signaler should be awaken, enter > the mutex again and try to send or receive. > > The issue is with the second item, I wrote a test (test_thread_safe, you > can see in the commit) which two threads try to receive and response on > same socket, each wait 500ms after receive to let the other thread a chance > to receive the next message. The main thread always sends two messages and > then wait for two responses assuming one will come from each thread (500ms > is more then enough to let the other thread to be awaken), in practice it > doesn't work, I can see cases that it is taking a thread to be awaken few > seconds and only one thread is handling the messages. I set debug messages > around the internal of libzmq to try to understand, I can see that the > thread is blocked on waiting for command, however only one of the thread > (usually the same one) is awaken when command arrive and not both. Sometime > the other thread is not even on the waiting phase (on the sleep) and the > other thread is still not awaken. > > Some of my thoughts: > * Two different threads are polling on the same file descriptor, from all > of my check this should be ok, also nanomsg is doing the same. > * Maybe the test project in libzmq is limited to one core? anyway i'm > doing a sleep, the operating system should try and process other threads. > * Maybe eventfd is not right for this? > * I have a bug? > > I'm testing this on ubuntu desktop 14.10. > > So I will appreciate any help. > > Regarding if thread safe is right or not for zeromq, I think we have > another discussion for this, I will really appreciate help with the problem. > > Doron > > > > > > > >
_______________________________________________ zeromq-dev mailing list [email protected] http://lists.zeromq.org/mailman/listinfo/zeromq-dev
