Banyak dari ini berkaitan dengan sejarah dan arah masa depan.
Sekali waktu ada dua versi unix utama (dan agak bersaing) - sistem V dan BSD. SysV memiliki versi IPC sendiri, termasuk 3 besar - memori bersama, semaphore, dan antrian pesan. POSIX datang untuk mencoba dan menyatukan berbagai hal.
Jadi saat ini kami memiliki dua versi - posix shared memory, MQs, dan semaphore dan versi sysV. Untuk membuatnya sedikit lebih membingungkan, versi sysV juga bagian dari posix.
Jadi pada dasarnya pertanyaan Anda adalah apakah Anda ingin menggunakan memori bersama gaya Posix atau sysV? Secara umum kebanyakan orang mengambil pandangan jangka panjang dan memilih Posix karena tampaknya jalan menuju masa depan. Namun, secara realistis, hal-hal sysV begitu tertanam dalam begitu banyak sistem sehingga Anda pasti ragu bahwa hal itu akan hilang.
Jadi, menghilangkan hal-hal jangka panjang, tergantung pada apa yang masuk akal untuk proyek dan selera Anda. Secara umum versi sysV sebenarnya cenderung agak lebih kuat tetapi mereka memiliki antarmuka kikuk yang bagi kebanyakan orang sedikit membingungkan pada kontak pertama. Ini terutama berlaku untuk sysV semaphore dan antrian pesan. Dalam hal memori bersama, dapat dikatakan sysV dan posix canggung. Versi sysV membawa ftok yang kikuk dan hal-hal penting sementara posix akhirnya menerima banyak panggilan dan beberapa kondisi balapan untuk disiapkan. Dari luar, versi posix memiliki keuntungan karena menggunakan sistem file dan dapat dipertahankan dengan fungsi baris perintah standar seperti 'rm' daripada mengandalkan program utilitas terpisah (mis. ipcs ) yang dibutuhkan sysV.
Jadi mana yang harus Anda gunakan? Sebagai aturan, versi posix. Tetapi Anda harus benar-benar membiasakan diri dengan versi sysV. Mereka memiliki beberapa fitur yang melampaui kemampuan versi posix yang mungkin ingin Anda manfaatkan dalam situasi tertentu.
Kedua metode itu layak. mmap metode ini sedikit lebih ketat daripada shmget , tetapi lebih mudah digunakan. shmget adalah model memori bersama System V lama dan memiliki dukungan terluas. mmap /shm_open adalah cara POSIX baru untuk melakukan memori bersama dan lebih mudah digunakan. Jika OS Anda mengizinkan penggunaan memori bersama POSIX maka saya sarankan untuk melakukannya.
Beberapa petunjuk:
- Jika Anda membuat anak Anda melalui
forklalummapdenganMAP_ANONYMOUS | MAP_SHAREDsejauh ini merupakan cara termudah - hanya satu panggilan.MAP_ANONYMOUSnamun merupakan ekstensi Linux yang tidak ditentukan oleh POSIX. - Jika Anda memulai proses secara mandiri, tetapi dapat menyediakannya dengan nama memori bersama, maka
shm_open(+ftruncate) +mmapdenganMAP_SHAREDadalah dua/tiga panggilan. Membutuhkanlibrtpada beberapa OS. - Jika OS Anda memiliki
/dev/shm/lalushm_opensama dengan membuka file di/dev/shm/.