optimizations & tuning
Better performance using locks/conditions on full/empty buffer scenarios
Simplified producer
Code cleaning; simplified producers/consumers
further optimizations