Ring buffer lock-free kích thước C với chỉ số wr (writer) và rd (reader), cùng đếm count. Producer ghi giá trị, consumer đọc; nếu producer ghi khi đầy thì ghi đè phần tử cũ nhất (overrun) và rd cũng tiến lên — đếm overrun += 1.
Thao tác:
W v — ghi giá trị v vào ô wr; wr=(wr+1)%C. Nếu đang đầy (count==C): overrun (rd=(rd+1)%C, count giữ C, overrun+=1). Nếu chưa đầy: count+=1.R — nếu count>0: đọc ô rd, in giá trị, rd=(rd+1)%C, count-=1. Nếu rỗng: in EMPTY.In: với mỗi R một dòng (giá trị hoặc EMPTY); dòng cuối in OVERRUN <overrun>.
C=2: W 1,W 2,W 3(đầy→ghi đè ô cũ nhất là 1, overrun=1, rd tiến), R(đọc 2),R(đọc 3) → in 2,3,OVERRUN 1.
Dòng đầu: C n. n dòng: W v hoặc R.
1 ≤ C ≤ 10^5, 1 ≤ n ≤ 2000, 0 ≤ v ≤ 10^9.
Mỗi R in một dòng (giá trị hoặc EMPTY); cuối cùng in OVERRUN k.
Ví dụ:
Đầu vào:
2 5
W 1
W 2
W 3
R
R
Đầu ra:
2
3
OVERRUN 1
Giải thích:
Đang tải editor...