updating the read index, yes? how is that expressed
as portably as
possible? Does __sync_synchronized reliably do that? (The
documentation is surprisingly short...)
I wonder if
{
pthread_mutex_t dummy = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&dummy);
pthread_mutex_unlock(&dummy);
}
doesn't provide a portable full memory barrier. The dummy is different
each time, so no contention -- but still inefficient since this would
be a 2-step full barrier. Nevertheless, it could be a portable
fallback.
Oh, and you probably need a barrier in the consummer too, just
reasoning from symmetry.
-- Dan