Implement a single-producer multi-consumer ring buffer

Quick Overview

This question evaluates understanding of ring-buffer data structures, circular indexing, fixed-capacity storage, and object-oriented design for a single-producer, multi-consumer implementation in C++.

Implement a single-producer multi-consumer ring buffer

Company: Citadel

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: medium

Interview Round: Technical Screen

Implement a fixed-capacity ring buffer in **C++** for a setting with **one producer** and **multiple consumers**. Design a class that stores integers in a preallocated circular array and supports the following operations: - `RingBuffer(int capacity)`: initialize the buffer with a fixed capacity. - `bool push(int value)`: insert a value at the tail. Return `false` if the buffer is full. - `bool pop(int& value)`: remove the oldest value from the head and write it into `value`. Return `false` if the buffer is empty. - `bool empty() const` - `bool full() const` - `int size() const` Requirements: - All operations should run in **O(1)** time. - Use circular indexing to reuse freed space. - Do not resize the underlying storage. - Focus on the **object-oriented design** and correct ring-buffer behavior. - You may assume synchronization is handled externally; the main goal is to implement the ring-buffer logic correctly for a single-producer, multi-consumer use case. After coding, briefly explain how you would adapt the design if true thread safety were required.

Overview: This question evaluates understanding of ring-buffer data structures, circular indexing, fixed-capacity storage, and object-oriented design for a single-producer, multi-consumer implementation in C++.

Citadel logo
Citadel
Feb 21, 2026
mediumSoftware EngineerTechnical ScreenCoding & Algorithms
37
0

Implement a fixed-capacity ring buffer in C++ for a setting with one producer and multiple consumers.

Design a class that stores integers in a preallocated circular array and supports the following operations:

  • RingBuffer(int capacity) : initialize the buffer with a fixed capacity.
  • bool push(int value) : insert a value at the tail. Return false if the buffer is full.
  • bool pop(int& value) : remove the oldest value from the head and write it into value . Return false if the buffer is empty.
  • bool empty() const
  • bool full() const
  • int size() const

Requirements:

  • All operations should run in O(1) time.
  • Use circular indexing to reuse freed space.
  • Do not resize the underlying storage.
  • Focus on the object-oriented design and correct ring-buffer behavior.
  • You may assume synchronization is handled externally; the main goal is to implement the ring-buffer logic correctly for a single-producer, multi-consumer use case.

After coding, briefly explain how you would adapt the design if true thread safety were required.