Saya mencoba menemukan cara untuk menulis aplikasi dengan IPC bebas kunci di Linux, di C, dengan prosesor multi-core.
Mari kita asumsikan saya memiliki proses 1 dan proses 2 yang menulis ke FIFO atau memori bersama. Kemudian proses 3 dan proses 4 akan membaca dari memori bersama atau FIFO itu.
Apakah ini mungkin dengan algoritma bebas kunci?
Bimbingan Anda sangat dihargai.
c
linux
multithreading
poli
sumber
sumber
Jawaban:
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:
penulis memperbarui pointer entri terakhir.
pembaca menunggu sampai ada entri yang tersedia di buffer cincin (terakhir! = saat ini).
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.
sumber
Iya itu mungkin. Kami menggunakan salah satu algoritma antrian bebas kunci di proyek kami. Tetapi algoritma ini benar-benar tidak jelas. Jika Anda ingin memahami mereka secara mendalam, Anda harus siap menghabiskan beberapa bulan untuk itu.
sumber
Komunikasi antar proses tidak boleh bebas dari penguncian. Hanya antar-utas. Sejauh yang saya ketahui.
sumber