In concurrent_bounded_queue,push() sleeps if no slot is available and pop() sleeps if no data. There can be short periods of busy-waiting (spinning), but long waits are always passive. On the other hand, TBB was not designed for real-time, so I would expect surprises.
How a receiver thread selects a queue to push data into - randomly?
Would you be able to show thread stacks when they spin?