Penyegerakan Tanpa Kunci dalam IPC Memori Dikongsi
Dalam persekitaran berbilang proses dengan memori dikongsi, mengurus penyegerakan adalah penting. Untuk menangani cabaran ini, Boost menyediakan perpustakaan serba boleh untuk komunikasi Interprocess dan struktur data Lockfree.
Boost Interprocess and Lockfree
Boost Interprocess menawarkan kemudahan untuk mengurus segmen memori dikongsi dan memperuntukkan dalam diri mereka. Boost Lockfree, sebaliknya, termasuk baris gilir Single-Producer Single-Consumer (SPSC), yang boleh berfungsi sebagai penampan bulat dalam senario anda.
IPC Tanpa Kunci dengan Queue SPSC
Untuk menunjukkan IPC tanpa kunci menggunakan penimbal bulat, mari kita tentukan baris gilir SPSC yang dikongsi menggunakan jenis Boost, di mana shared_string memperuntukkan secara telus daripada memori dikongsi:
<code class="cpp">namespace shm { using ring_buffer = boost::lockfree::spsc_queue< shared_string, boost::lockfree::capacity<200> >; }</code>
Pihak Pengguna
Pengguna memantau baris gilir, memproses mesej apabila mereka sampai:
<code class="cpp">while (true) { shm::shared_string v(char_alloc); if (queue->pop(v)) std::cout << "Processed: '" << v << "'\n"; }
Pihak Pengeluar
Pengeluar menolak mesej ke dalam beratur pada kadar terkawal:
<code class="cpp">for (const char* s : { "hello world", "the answer is 42", "where is your towel" }) { queue->push({s, char_alloc}); }</code>
Penyegerakan dalam Senario Dunia Nyata
Adalah penting untuk ambil perhatian bahawa penyegerakan dengan proses lain harus dilaksanakan semasa fasa permulaan mekanisme IPC. Selain itu, pastikan pembersihan yang betul dan pembebasan segmen memori yang dikongsi apabila perlu.
Atas ialah kandungan terperinci Bagaimanakah Boost Interprocess dan Lockfree Mencipta IPC Tanpa Kunci dengan Barisan SPSC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!