Dalam pemrograman, terutama pada sistem Unix, semaphore adalah teknik untuk mengoordinasikan atau menyinkronkan aktivitas di mana beberapa proses bersaing untuk sumber daya sistem operasi yang sama.
Semaphore adalah nilai yang ada di tempat yang ditentukan dalam penyimpanan sistem operasi (atau kernel) yang dapat diperiksa dan kemudian diubah oleh setiap proses. Bergantung pada nilai yang ditemukan, proses dapat menggunakan sumber daya tersebut atau akan menemukan bahwa sumber daya tersebut sudah digunakan dan harus menunggu beberapa waktu sebelum mencoba lagi.
Semaphore bisa berupa binary (0 atau 1) atau dapat memiliki nilai tambahan. Biasanya, proses yang menggunakan semaphore memeriksa nilainya dan kemudian, jika menggunakan sumber daya, mengubah nilai tersebut untuk mencerminkan hal ini sehingga pengguna semaphore berikutnya akan tahu untuk menunggu.
Semaphore umumnya digunakan untuk dua tujuan: untuk berbagi ruang memori bersama dan untuk berbagi akses ke file. Semaphore adalah salah satu teknik untuk komunikasi antarproses (IPC). Bahasa pemrograman C menyediakan serangkaian antarmuka atau “fungsi” untuk mengelola semaphore.
Semaphores tetap menjadi komponen kunci dalam manajemen sumber daya dan komunikasi antarproses dalam banyak sistem operasi modern, terutama dalam aplikasi dengan banyak thread atau proses yang berjalan secara bersamaan.
Teknologi terbaru juga telah mengadaptasi semaphores untuk penggunaan dalam konteks seperti multithreading dan synchronization primitives yang lebih efisien pada sistem modern, seperti menggunakan mutexes dan condition variables pada bahasa pemrograman tingkat tinggi.