Producer-Consumer Pattern — a fundamental concurrency pattern where producer threads generate data and consumer threads process it, communicating through a shared buffer.
Architecture
[Producer 1] →→
[Producer 2] →→ [Shared Buffer/Queue] →→ [Consumer 1]
[Producer 3] →→ →→ [Consumer 2]
Bounded Buffer Implementation
- Fixed-size queue (ring buffer) between producers and consumers
- Producers block when buffer is full (back-pressure)
- Consumers block when buffer is empty (no work)
- Synchronization: Mutex + two condition variables (not_full, not_empty)
Benefits
- Decoupling: Producers and consumers run at different speeds
- Buffering: Absorbs bursts in production/consumption rates
- Scalability: Add producers or consumers independently
Lock-Free Variants
- SPSC (Single-Producer Single-Consumer): Ring buffer with atomic head/tail pointers — no locks needed. Fastest option when topology matches
- MPMC (Multi-Producer Multi-Consumer): More complex, often uses CAS. Examples: Java ConcurrentLinkedQueue, Disruptor
Common Applications
- Web server: Accept thread (producer) → request queue → worker threads (consumers)
- Pipeline processing: Each stage is consumer of previous, producer for next
- Logging: Application threads produce log entries → log writer consumes
Producer-consumer is ubiquitous — it appears in virtually every concurrent system from operating systems to web servers.
producer consumer patternbounded bufferconcurrent queue
Explore 500+ Semiconductor & AI Topics
From EUV lithography to CUDA optimization — search the full knowledge base or chat with our AI assistant.