Ketika berbicara tentang pengembangan perangkat lunak dengan PHP, ada satu hal penting yang perlu kita pahami, yaitu bagaimana cara mengatur akses ke satu sumber. Bayangkan saja jika ada banyak tugas yang harus dilakukan oleh komputer pada saat yang bersamaan. Bagaimana cara untuk memastikan bahwa tidak ada kekacauan atau masalah ketika beberapa tugas mencoba mengakses suatu resource yang sama secara bersamaan?

Bagi seorang pemula dalam pemrograman PHP, pemahaman tentang mutex adalah langkah awal yang penting dalam membangun aplikasi yang berfungsi dengan baik dan aman. Artikel ini akan membantu Anda memahami konsep dasar mutex, mengapa Anda memerlukannya dalam pengembangan PHP, dan bagaimana cara menggunakannya. Mari mulai dengan memahami apa itu mutex dan mengapa ini menjadi hal yang penting dalam pemrograman PHP.

Mengenal konsep dasar mutex

Mutex atau “mutual exclusion” merupakan suatu program yang berfungi untuk mengatur akses ke sebuah resource. Jika diibaratkan, seperti penjaga lalu lintas. Fungsinya adalah untuk mengatur aliran akses ke resource bersama. Mutex akan memastikan bahwa hanya satu aliran akses (tugas atau proses) yang dapat mengakses resource tertentu pada satu waktu. Mengapa hal tersebut penting? Karena tanpa mutex, proses akses resource akan terjadi di waktu yang bersamaan. Hal tersebut dapat berisiko yang menimbulkan masalah, seperti data yang rusak atau hasil yang tidak konsisten. Untuk lebih memahami tentang mutex, simaklah dua ilustrasi berikut

Ilustrasi 1: Penjadwalan Akses ke Meja Makan

Bayangkan suatu kondisi di mana ada beberapa teman yang hendak makan bersama dalam satu meja makan yang hanya memiliki satu garpu. Mereka semua lapar dan tentunya ingin menggunakan garpu tersebut untuk makan. Jika tidak ada aturan yang mengatur penggunaan garpu, mereka mungkin akan mencoba mengambil garpu bersamaan. Akibatnya, garpu bisa terjatuh, atau tidak ada yang bisa makan dengan nyaman.

Dalam konteks ini, ketika beberapa bagian dari program berjalan bersamaan (multi-threading) atau ketika beberapa program berjalan dalam satu waktu (multi-processing) setiap thread atau proses mungkin ingin mengakses resource (contoh diatas yaitu garpu) di waktu yang sama untuk melakukan operasi tertentu. Tanpa mutex (aturan), beberapa thread atau proses dapat mencoba mengakses resource tersebut secara bersamaan. Akibatnya, akan terjadi kekacauan dan konflik baik pada resource mapun thread atau proses yang sedang berlangsung.

Ilustrasi 2: Penukaran Pesan dalam Keluarga

Bayangkan suatu kondisi di mana ada suatu keluarga yang menyediakan papan tulis untuk saling berkomunikasi di rumah mereka. Setiap anggota keluarga dapat menulis pesan dan/atau membaca pesan yang ditulis di papan tulis tersebut. Namun, jika tidak ada aturan yang mengatur kapan boleh menulis atau membaca pesan, bisa saja terjadi situasi di mana beberapa anggota keluarga mencoba menulis pesan pada saat bersamaan. Hal tersebut dapat membuat pesan-pesan menjadi kacau dan sulit dimengerti.

Dalam dunia komputer, ada situasi yang serupa, di mana saat beberapa bagian dari program berjalan bersamaan (multi-threading) atau ketika beberapa program berjalan dalam satu waktu (multi-processing). Beberapa bagian dari program mungkin perlu berbagi informasi atau data melalui suatu resource, seperti variabel. Mutex adalah seperti aturan yang mengontrol akses ke sumber daya bersama ini. Ini memastikan bahwa setiap bagian dari program tahu kapan boleh membaca atau menulis data tanpa menciptakan kekacauan atau tumpang tindih yang dapat merusak informasi. Dengan demikian, mutex dapat membantu menjaga urutan dan integritas data dalam suatu program, mirip dengan bagaimana aturan dalam keluarga membantu menjaga pesan-pesan agar tetap terorganisir.

Potensi Masalah dalam Penggunaan Mutex

Ketika berbicara tentang penggunaan mutex, ada beberapa masalah yang perlu menjadi pertimbangan. Ingatlah bahwa mutex adalah aturan yang mengontrol bagaimana thread atau proses dapat mengakses sumber daya bersama. Namun, seperti dalam kehidupan nyata, aturan ini juga dapat menciptakan masalah jika tidak digunakan dengan bijak.

  • Risiko Deadlock. Pertama, ada risiko deadlock. Deadlock terjadi ketika dua atau lebih thread atau proses terjebak dalam situasi di mana mereka saling menunggu satu sama lain dan tidak dapat melanjutkan. Ini seperti dua orang yang berdiri di depan pintu yang saling menunggu untuk masuk, tapi tidak ada yang mau memberikan jalan. Dalam konteks mutex, deadlock terjadi ketika thread A mengunci mutex A dan mencoba untuk mengunci mutex B, sementara thread B juga mengunci mutex B dan mencoba mengunci mutex A. Kedua thread akan terjebak dan tidak bisa melanjutkan.
  • Penggunaan Berlebihan Mutex. Kedua, kita harus berhati-hati agar tidak menggunakan terlalu banyak mutex. Hal tersebut karena terlalu banyak mutex seperti memiliki terlalu banyak aturan di keluarga yang membuat semua orang kebingungan. Terlalu banyak mutex bisa mengganggu kinerja program dan membuat kode menjadi lebih rumit. Jadi, perlu pertimbangan yang baik dalam menentukan berapa banyak mutex yang perlu digunakan.

Lalu kapan sebaiknya menggunakan mutex?

Saat memutuskan apakah kita perlu menggunakan mutex, kita harus mempertimbangkan situasi tertentu. Ini mirip dengan pertimbangan saat kita membuat peraturan dalam keluarga.

  • Ketika mengakses sumber daya bersama. Pertama, kita perlu menggunakan mutex ketika beberapa thread atau proses ingin mengakses sumber daya bersama, seperti variabel atau basis data, dan ada potensi untuk tumpang tindih atau konflik. Ini seperti mengatur aturan ketika anggota keluarga ingin menggunakan papan tulis. Mutex membantu menjaga agar akses ke sumber daya bersama teratur dan aman.
  • Ketika terdapat kemungkinan race condition Kedua, mutex sangat berguna ketika ada kemungkinan race condition. Race condition terjadi ketika beberapa thread atau proses bersaing untuk mengakses sumber daya bersama secara bersamaan, tanpa koordinasi. Seperti dalam keluarga, mutex adalah cara kita memastikan bahwa semua anggota keluarga tidak mencoba menulis pesan pada saat yang sama.
  • Ketika memiliki akses bersama yang memerlukan koordinasi. Terakhir, kita perlu menggunakan mutex ketika ada operasi yang memerlukan koordinasi. Ini seperti situasi di mana beberapa anggota keluarga ingin membagi tugas, dan kita perlu memastikan bahwa semua orang tahu siapa yang melakukan apa. Mutex membantu kita mengatur urutan operasi dan berbagi informasi dengan benar.

Namun, ada juga situasi ketika kita tidak perlu menggunakan mutex, seperti ketika kita bekerja dengan data yang tidak berubah (immutable) atau ketika operasi bersifat read-only. Seperti dalam kehidupan, kita hanya membuat aturan jika diperlukan, dan kita hindari membuat terlalu banyak aturan yang membingungkan.

Contoh penggunaan mutex

Salah satu contoh penggunaan mutex yang dibahas dalam artikel ini adalah mutex untuk melindungi data dari akses bersamaan. Misalnya, pada aplikasi database beberapa thread dapat dibuat untuk menangani beberapa permintaan secara bersamaan. Basis datanya sendiri dilindungi oleh mutex yang disebut db_mutex

Apa itu Mutex dalam PHP? Konsep Dasar Mutex, dan Mengapa Anda Memerlukannya Dalam Pengembangan PHP

Thread awal berfungsi untuk membuat mutex dan semua thread penanganan permintaan. Mutex diteruskan ke thread menggunakan parameter rutin titik masuk thread. Dalam program nyata, alamat mutex mungkin merupakan bidang struktur data yang lebih kompleks yang diteruskan ke thread yang dibuat. Ada banyak contoh penggunaan mutex di www.ibm.com. Untuk lebih lengkapnya, contoh penggunaan mutex dapat diakses di website resmi ibm tersebut.

Sumber:
https://www.ibm.com/docs/en/aix/7.2?topic=programming-using-mutexes
https://julismail.staff.telkomuniversity.ac.id/tentang-mutex-mutual-exclusion/
https://core.ac.uk/download/pdf/77625018.pdf