GNU/Linux >> Belajar Linux >  >> Linux

Apa Perbedaan Antara Spin Lock dan Semaphore?

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)

Linux
  1. Apa perbedaan antara InnoDB dan MyISAM?

  2. Apa Perbedaan Antara Git Switch dan Checkout?

  3. Apa perbedaan antara insmod dan modprobe

  1. Apa perbedaan antara strtok_r dan strtok_s di C?

  2. Apa perbedaan antara fsck dan e2fsck?

  3. Apa perbedaan antara adduser dan useradd?

  1. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?

  2. Apa perbedaan antara ls dan l?

  3. Apa perbedaan antara $(CC) dan $CC?