Ben Peart <Ben.Peart@xxxxxxxxxxxxx> writes: > +/* > + * struct mpmcq_entry is an opaque structure representing an entry in the > + * queue. > + */ > +struct mpmcq_entry { > + struct mpmcq_entry *next; > +}; > + > +/* > + * struct mpmcq is the concurrent queue structure. Members should not be > + * modified directly. > + */ > +struct mpmcq { > + struct mpmcq_entry *head; > + pthread_mutex_t mutex; > + pthread_cond_t condition; > + int cancel; > +}; This calls itself a queue, but a new element goes to the beginning of a singly linked list, and the only way to take an element out is from near the beinning of the linked list, so it looks more like a LIFO stack to me. I do not know how much it matters, as the name mpmcq is totally opaque to readers so perhaps readers are not even aware of various aspects of the service, e.g. how it works, what fairness it gives to the calling code, etc.