Boost logo

Boost Users :

Subject: Re: [Boost-users] inter thread communication with message queues
From: Dirk Botha (bothadj_at_[hidden])
Date: 2014-01-28 05:25:45


Hi Kenneth,

I know I'm not answering your question, but I believe this Open Source
project addresses all your needs already:
https://github.com/TheLastCylon/kisscpp

Thread-safe queues and Inter Process Communications are at the core of the
library.

--
Regards,
Dirk J. Botha
http://www.djb.co.za
~*~ Registered Linux User #379726 ~*~
"If people concentrated on the really important things of life, there'd be
a shortage of fishing poles." ~ Doug Larson
On 24 January 2014 17:05, Kenneth Adam Miller
<kennethadammiller_at_[hidden]>wrote:
> I was reading about message queues with respect to inter thread
> communication, and I have a specific use case that I want to describe. It's
> rather complex, so I want to be careful that I design it so that there are
> no race conditions.
>
> Pool A is a buffer (of type 1) handle manager, that feeds buffer handles
> into thread set 1, and receives old handles from thread set 2. There is
> only one thread running pool A.
>
> Thread set 1 is a set of N threads that fill up buffers of type 1 with
> regular data. It pushes full buffers to thread set 2.
>
> Thread set 2 is a set of M threads that compress buffers of type 1 into
> data buffers of type 2. Once the buffer of type 1 has be used up, it is
> cleared and sent back to Pool A. It pulls fresh data buffers of type 2 from
> Pool B, and sends freshly filled compressed buffers to Pool C.
>
> Pool C does something with the buffer, clears it and hands it to Pool B.
>
> Can this be done safely using an implementation like what I see here:
> http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html
> ?
>
> Note 1: -= denotes a 1-to-N connect and =- a N-to-1 connect
>
> RR = Request reply relationship
>
>    +--------------------------------------------------------------------+
>    |                                                                    |
>    v                                                                    |
>  Pool A     RR   Thread Set 1         Router X                          |
> PULL-PUSH --==> PULL-read-PUSH ==--> PULL-PUSH --==> PULL Thread Set 2 PUSH
>                                                          \            /
>                                                           +-compress-+
>                                       Pool B      RR     /            \
>                                      PULL-PUSH --==> PULL              PUSH
>                                       ^                                 ||
>                                       |                                 ||
>                                       +----------- PUSH-write-PULL <--==++
>                                                       Pool C
>
>
> Questions: how do I have a separate thread poll on multiple shared message
> queues? Like, I have a thread pool that both receives requests for buffer
> handles and that receives old buffer handles to recycle.
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net