Saya telah melihat referensi untuk menggunakan buffer cincin, dan mengontrol akses pointer lokasi untuk menghilangkan atau mengurangi kebutuhan akan kunci. Itu tidak menghilangkan kebutuhan untuk menunggu, dan seharusnya hanya berfungsi maka buffer cincin memiliki satu penulis dan satu pembaca. Dalam kasus Anda, Anda membutuhkan setidaknya dua buffer.
Mekanisme yang saya mengerti adalah:
Bergantung pada waktu tunggu yang digunakan, ini dapat menambah latensi untuk item baru dalam antrian kosong, atau membakar banyak siklus CPU dalam loop tunggu. Urutan memperbarui pointer dan pemisahan yang ketat dari akses tulis sangat penting agar ini berfungsi. Penulis hanya diperbolehkan untuk menulis entri buffer cincin sebelum menambahkan pointer untuk membuatnya tersedia bagi pembaca.