Semaphore vs Mutex
Semaphore adalah struktur data yang digunakan untuk memastikan bahawa banyak proses tidak mengakses sumber yang sama atau seksyen kritikal pada masa yang sama, dalam persekitaran pengaturcaraan selari. Semaphores digunakan untuk mengelakkan kunci mati dan keadaan perlumbaan. Mutex (Objek Pengecualian Bersama) juga digunakan untuk mengelakkan akses kepada sumber yang sama pada masa yang sama oleh beberapa proses serentak.
Apa itu Semaphore?
Semaphore adalah struktur data yang digunakan untuk memberikan pengecualian bersama kepada bahagian kritikal. Semaphores terutamanya menyokong dua operasi yang disebut menunggu (sejarah dikenali sebagai P) dan isyarat (yang dikenali sebagai V). Operasi tunggu menghalang proses sehingga semaphore terbuka dan operasi isyarat membolehkan proses lain (thread) masuk. Setiap semaphore dikaitkan dengan satu barisan proses menunggu. Apabila operasi menunggu dipanggil oleh thread, jika semaphore terbuka, benang dapat diteruskan. Jika semaphore ditutup apabila operasi menunggu dipanggil oleh benang, benang disekat dan ia perlu menunggu dalam barisan. Operasi isyarat membuka semaphore dan jika ada benang yang sedang menunggu dalam barisan, proses itu dibenarkan untuk diteruskan dan jika tidak ada benang yang menunggu dalam barisan sinyal akan diingat untuk benang berikutnya. Terdapat dua jenis semaphores yang dipanggil semaphores mutex dan menghitung semaphores. Mutex semaphores membolehkan satu akses kepada semaphore sumber dan menghitung membolehkan beberapa thread untuk mengakses sumber (yang mempunyai beberapa unit tersedia).
Apakah Mutex??
Apabila aplikasi komputer dimulakan, ia akan mewujudkan mutex dan melampirkannya kepada sumber. Apabila sumber digunakan oleh benang, ia dikunci dan benang lain tidak dapat menggunakannya. Jika benang lain mahu menggunakan sumber yang sama, ia perlu membuat permintaan. Kemudian benang itu akan diletakkan dalam barisan hingga benang pertama selesai dengan sumber. Apabila thread pertama selesai dengan sumber, kunci akan dikeluarkan dan benang yang sedang menunggu dalam barisan dapat memperoleh akses ke sumber. Jika terdapat pelbagai thread yang menunggu dalam barisan, mereka diberi akses secara berputar. Secara praktiknya, apabila mutex menukar akses kepada sumber antara beberapa benang, ia akan dapat dilihat sebagai pelbagai benang memakan sumber pada masa yang sama. Tetapi secara dalaman hanya satu benang mengakses sumber pada masa yang diberikan.
Apakah perbezaan antara Semaphore dan Mutex??
Walaupun kedua-dua objek semaphores dan mutex digunakan untuk mencapai pengecualian bersama dalam persekitaran pengaturcaraan selari, mereka mempunyai beberapa perbezaan. Objek mutex hanya membenarkan satu benang untuk menggunakan sumber atau seksyen kritikal, sedangkan semaphores membenarkan nombor serentak akses serentak ke sumber (di bawah nombor maksimum yang dibenarkan). Dengan objek mutex, benang lain yang ingin mengakses sumber harus menunggu dalam barisan, sehingga benang semasa selesai menggunakan sumber.