Pengantar

Dalam pemrograman modern, terutama pada sistem yang mendukung multithreading, pengelolaan akses terhadap resource bersama menjadi sangat penting. Tanpa mekanisme kontrol yang baik, dapat terjadi masalah seperti race condition, deadlock, atau data corruption.

Untuk mengatasi hal tersebut, digunakan konsep synchronization primitives seperti mutex dan semaphore. Keduanya berfungsi untuk mengatur akses ke resource, tetapi memiliki cara kerja dan penggunaan yang berbeda.


Apa Itu Mutex?

Mutex (Mutual Exclusion) adalah mekanisme sinkronisasi yang digunakan untuk memastikan bahwa hanya satu thread yang dapat mengakses resource tertentu pada satu waktu.

Karakteristik Mutex

  • Bersifat binary (locked / unlocked)
  • Hanya satu thread yang dapat mengunci
  • Thread yang mengunci harus yang membuka

Cara Kerja Mutex

  1. Thread meminta lock
  2. Jika tersedia → lock diberikan
  3. Jika tidak → thread menunggu
  4. Setelah selesai → lock dilepas

Menurut Microsoft, mutex digunakan untuk mencegah akses bersamaan pada resource kritikal (dikutip dari learn.microsoft).

baca juga : Thunderbolt vs USB-C: Perbedaan Penting yang Sering Disalahpahami


Apa Itu Semaphore?

Semaphore adalah mekanisme sinkronisasi yang memungkinkan lebih dari satu thread mengakses resource secara bersamaan, tergantung pada nilai counter.

Karakteristik Semaphore

  • Menggunakan counter
  • Bisa mengizinkan beberapa thread sekaligus
  • Tidak selalu harus dilepas oleh thread yang sama

Jenis Semaphore

Binary Semaphore
  • Mirip mutex
  • Nilai hanya 0 atau 1
Counting Semaphore
  • Nilai lebih dari 1
  • Mengatur jumlah thread yang bisa masuk


Perbedaan Utama Mutex vs Semaphore

Jumlah Akses

  • Mutex → hanya 1 thread
  • Semaphore → banyak thread (sesuai counter)

Ownership

  • Mutex → memiliki owner (thread tertentu)
  • Semaphore → tidak memiliki owner

Kompleksitas

  • Mutex → lebih sederhana
  • Semaphore → lebih fleksibel

Penggunaan

  • Mutex → resource kritikal tunggal
  • Semaphore → resource dengan kapasitas tertentu

Contoh Penggunaan

Mutex

Digunakan untuk:

  • Mengakses file
  • Update variabel global
  • Critical section

Semaphore

Digunakan untuk:

  • Pool koneksi database
  • Thread worker
  • Resource terbatas

Menurut GeeksforGeeks, semaphore cocok untuk mengatur resource dengan kapasitas terbatas (dikutip dari geeksforgeeks).


Masalah yang Bisa Terjadi

Deadlock

Dua thread saling menunggu resource.

Starvation

Thread tertentu tidak mendapatkan akses.

Race Condition

Akses data tanpa sinkronisasi.


Best Practice Penggunaan

Gunakan Mutex untuk Critical Section

Jika hanya satu thread yang boleh akses.

Gunakan Semaphore untuk Resource Pool

Jika resource bisa digunakan bersama.

Hindari Deadlock

Gunakan urutan lock yang konsisten.

Gunakan Timeout

Untuk mencegah blocking terlalu lama.

baca juga : Critical Rendering Path: Kunci Mempercepat Loading Website


Kapan Menggunakan Mutex atau Semaphore?

Gunakan Mutex Jika:

  • Resource hanya boleh diakses satu thread
  • Membutuhkan kontrol ownership

Gunakan Semaphore Jika:

  • Resource memiliki kapasitas terbatas
  • Banyak thread boleh mengakses

baca juga : Memahami Alur Penanganan Insiden dari Tim SOC Menerima Alert Sampai Eskalasi ke Tim Incident Handler


Kesimpulan

Mutex dan semaphore adalah dua mekanisme penting dalam sinkronisasi thread. Mutex digunakan untuk memastikan eksklusivitas akses, sedangkan semaphore digunakan untuk mengatur jumlah thread yang dapat mengakses resource secara bersamaan.

Memahami perbedaan dan penggunaan keduanya sangat penting dalam membangun aplikasi yang stabil, aman, dan bebas dari masalah concurrency.