IPC bebas kunci di Linux untuk prosesor multi-core

9

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.

poli
sumber
Bisakah Anda memberikan beberapa indikasi atau referensi ke beberapa dokumentasi eksternal mengenai komunikasi bebas kunci? Apa yang dimaksud dengan istilah ini?
Giorgio
Jika saya mengerti dengan benar, masalahnya adalah menulis bersamaan (1, 2) dan membaca bersamaan (3, 4). Sinkronisasi antara penulis dan pembaca sudah dicakup oleh algoritma yang dijelaskan pada halaman tertaut.
Giorgio

Jawaban:

2

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 menunggu hingga ada slot terbuka (terakhir +1! = saat ini)
  • Penulis menulis entri dalam buffer cincin.
  • penulis memperbarui pointer entri terakhir.

  • pembaca menunggu sampai ada entri yang tersedia di buffer cincin (terakhir! = saat ini).

  • pembaca memproses entri.
  • pembaca menambah pointer 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.

BillThor
sumber
Dan saya telah menemukan yang satu ini juga di wikipedia, terlihat menarik, belum pernah mencobanya meskipun concurrencykit.org
poly
1

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.

Dmitry Poroh
sumber
0

Komunikasi antar proses tidak boleh bebas dari penguncian. Hanya antar-utas. Sejauh yang saya ketahui.

DeadMG
sumber
Saya pikir "kunci gratis" adalah atribut mekanisme, bukan pengguna. Perbedaan antara utas dan proses menjadi sangat tipis ketika Anda menambahkan hal-hal seperti memori bersama ke dalam campuran.
tylerl