[LAD] Inter thread Communication: Design Approach

Gabriel Beddingfield gabrbedd at gmail.com
Fri Sep 2 16:03:02 UTC 2011


On Fri, Sep 2, 2011 at 10:22 AM, David Robillard <d at drobilla.net> wrote:
>> >
>> > The main issue you'll find with going the C++/RTTI route is that #2 no
>> > longer is possible, since virtual objects are not POD, so you can't
>> > safely write them through a ringbuffer (or copy them around manually in
>> > general).
>> [snip]
>>
>> Correct me if I'm wrong... but...
>>
>> >>       class event_two_t : public event_t
>> >>       {
>> >>       public:
>> >>           int type() { return int(EVENT_TWO); }
>> >>           uint32_t size() { return sizeof(event_two); }
>> >>
>> >>           /* event-specific stuff */
>> >>       };
>>
>> The intention of the size() member function is to allow you to memcpy()
>> the object without knowing its type.  Is that not enough?
>
> Because it uses inheritance, this object is not POD, so strictly
> speaking no.

Yes, it's not strictly POD.  However, the objective was to have an
RT-safe way to pass almost-POD objects in the confines of a
single-process, shared-memory application.  In this situation, I think
the the fact that the vtable is not POD is a non-issue because the
pointers are all valid, static references.

However, if he needs some manner of IPC, serialization, or plugin
(loading/unloading code) scheme... then this is indeed a show stopper.

-gabriel



More information about the Linux-audio-dev mailing list