Skip to content
DeepForgeby svx
All problems
MediumData Structuresds-272

Lock-Free Ring Buffer Reserve/Commit

Problem

Simulate reserve and commit on a lock-free ring buffer.

capacity is the number of slots. operations contains "reserve" (values[i] is stored at the next free slot and the reservation succeeds only while outstanding reservations fit), "commit" (make the oldest reservation visible to consumers), or "consume" (record the oldest committed value, or None).

Return the list of recorded results (None for commit).

Hint

A consumer can only see slots whose reservations have been committed.

Test cases

case 1
in: [2,["reserve","commit","reserve","commit","consume","consume"],[7,0,8,0,0,0]]
expected: [true,null,true,null,7,8]
case 2
in: [1,["reserve","reserve","commit","consume"],[5,6,0,0]]
expected: [true,false,null,5]
case 3
in: [1,["consume"],[0]]
expected: [null]
case 4
in: [2,["reserve","commit","reserve","consume","consume"],[1,0,2,0,0]]
expected: [true,null,true,1,null]
Starter codePython
def ring_reserve_commit(capacity, operations, values):
    # Your code here
    pass

4 test cases · run your code against them in the editor