lockfree
adalah kumpulan struktur data bebas kunci yang ditulis dalam standar C++11 dan cocok untuk semua platform - mulai dari yang tertanam secara mendalam hingga HPC.
Struktur data bebas kunci adalah struktur data yang aman untuk thread dan interupsi untuk penggunaan bersamaan tanpa harus menggunakan mekanisme pengecualian bersama. Mereka paling berguna untuk komunikasi antar proses, dan seringkali berskala jauh lebih baik daripada struktur berbasis kunci dengan jumlah operasi dan thread.
lockfree
Struktur data ini lebih berperforma dan umumnya harus digunakan setiap kali hanya ada satu thread/interupsi yang mendorong data dan thread lain mengambilnya.
Struktur data ini lebih umum, mendukung banyak produsen dan konsumen pada saat yang sama, namun memiliki penyimpanan dan kinerja yang berlebihan dibandingkan dengan struktur data konsumen tunggal produsen tunggal. Mereka juga memerlukan instruksi atom yang mungkin hilang dari beberapa mikrokontroler kelas bawah.
Ada tiga cara utama untuk mendapatkan perpustakaan:
lockfree
menggunakan penyelarasan cacheline untuk indeks guna menghindari fenomena False Sharing secara default, menghindari hilangnya kinerja karena pembatalan cacheline pada sistem koheren cache. Ini menyelaraskan indeks ke LOCKFREE_CACHELINE_LENGTH
, 64
secara default.
Pada sistem tertanam, LOCKFREE_CACHE_COHERENT
hampir selalu disetel sebagai false
untuk menghindari pemborosan memori.
Selain itu, beberapa sistem memiliki panjang cacheline yang tidak biasa (misalnya CPU apple M1/M2 memiliki panjang cacheline 128 byte), dan LOCKFREE_CACHELINE_LENGTH
harus disetel sesuai dengan kasus tersebut.
Semua struktur data di lockfree
hanya dimaksudkan untuk digunakan untuk tipe sepele.
Alasan terbesar Anda ingin menggunakan struktur data bebas kunci pada lingkungan yang dihosting adalah menghindari masalah seputar penguncian seperti kebuntuan, inversi prioritas, dan latensi akses nondeterministik. Jika digunakan dengan benar, struktur data bebas kunci juga dapat meningkatkan performa dalam beberapa skenario.
Selain itu, lockfree
menyediakan cara untuk membangun aplikasi dan perpustakaan yang dapat dikompilasi untuk bekerja pada lingkungan POSIX dan non-POSIX tanpa #ifdef
atau polimorfisme.
Meskipun penguncian biasanya tidak mahal pada sistem tertanam seperti mikrokontroler, terdapat beragam RTOS-es dan tidak ada API standar untuk penguncian. Fakta bahwa terdapat banyak arsitektur dari 8051 hingga RISC-V berarti metode manajemen interupsi juga tidak terstandarisasi.
lockfree
menyediakan cara untuk membuat kode tertanam portabel dengan biaya kinerja yang dapat diabaikan dibandingkan dengan penguncian, kode yang menggunakan lockfree
dapat dikompilasi untuk dijalankan pada platform tertanam apa pun yang mendukung C++11. Selain itu, kode tersebut dapat dengan mudah diuji pada mesin host tanpa perlu diolok-olok.
lockfree
? Semua struktur di lockfree
dibatasi , berbasis array , dan bebas kunci , struktur data spsc juga bebas menunggu dan aman untuk terminasi .
Untuk wawasan lebih lanjut tentang pemrograman bebas kunci, lihat: