I was looking through the code for AudioProcessorGraph and I noticed there's locking of a mutex to update the renderingOps array (in AudioProcessorGraph::buildRenderingSequence()):
// swap over to the new rendering sequence.. const ScopedLock sl (getCallbackLock());
I'm trying to square that with the views of this article:
In practice, are mutexes not really a problem? Are OSes now smart enough to avoid priority inversion?
Also, I was wondering why renderingOps is an Array<void*>? Seems it should be Array<RenderingOp*>, with AudioGraph::RenderingOp forward declared as a private nested class in the header.