Apa perbedaan mendasar antara spin lock dan semaphore yang sedang beraksi?
Jawaban yang Diterima:
Keduanya mengelola sumber daya yang terbatas. Pertama-tama saya akan menjelaskan perbedaan antara semaphore biner (mutex) dan spin lock.
Spin lock melakukan penantian yang sibuk – yaitu terus menjalankan loop:
while (try_acquire_resource ());
...
release();
Ini melakukan penguncian/pembukaan kunci yang sangat ringan tetapi jika utas penguncian akan didahului oleh yang lain yang akan mencoba mengakses sumber yang sama, yang kedua hanya akan mencoba untuk memperoleh sumber daya sampai kehabisan kuanta CPU.
Di sisi lain mutex berperilaku lebih seperti:
if (!try_lock()) {
add_to_waiting_queue ();
wait();
}
...
process *p = get_next_process_from_waiting_queue ();
p->wakeUp ();
Oleh karena itu, jika utas akan mencoba memperoleh sumber daya yang diblokir, utas itu akan ditangguhkan hingga tersedia untuk itu. Mengunci/membuka kunci jauh lebih berat tetapi menunggu itu 'gratis' dan 'adil'.
Semaphore adalah kunci yang diizinkan untuk digunakan beberapa kali (dikenal dari inisialisasi) beberapa kali – misalnya 3 utas diizinkan untuk menahan sumber daya secara bersamaan tetapi tidak lebih. Ini digunakan misalnya dalam masalah produsen/konsumen atau secara umum dalam antrian:
P(resources_sem)
resource = resources.pop()
...
resources.push(resources)
V(resources_sem)