Home >> Blog >> 了解自旋鎖spinlock和旗號emaphore之間的區別

了解自旋鎖spinlock和旗號emaphore之間的區別

在本文中,您將了解 Spinlock 和 Semaphore 之間的區別。但在討論差異之前,您必須了解 Spinlock 和 Semaphore。

什麼是自旋鎖?

它是一種鎖定機制。它使執行緒能夠等待鎖準備好,即執行緒可以在循環中等待或自旋,直到鎖準備好。它只保留很短的時間,在多處理器系統中很有用。執行緒持有自旋鎖,直到獲得鎖後釋放。在一些實現中,如果持有鎖的執行緒被阻塞或進入睡眠狀態,則自旋鎖會自動釋放。

自旋鎖還避免了由操作系統行程重新調度或上下文切換引起的開銷。此外,自旋鎖是一種臨時阻塞執行緒的有效方法。因此,大多數操作系統內核都使用自旋鎖。但是,如果一個執行緒長時間保持自旋鎖,它可能會阻止其他執行緒執行。在這種情況下,其他執行緒反复嘗試獲取鎖,而持有鎖的執行緒並沒有開始釋放它。通常,它可能主要發生在單處理器系統中。

自旋鎖的優缺點

自旋鎖有各種優點和缺點。自旋鎖的一些優點和缺點如下:

優點

  • 它不需要上下文切換,因為它正忙於等待,並且執行緒沒有休眠。
  • 如果臨界區 (CS) 較小,則很有幫助。

缺點

  • 自旋鎖需要忙著等待。
  • 當鎖不可用時,它會浪費一個 CPU 週期並反複檢查它是否可以訪問。

什麼是旗號?

旗號是多個行程共享的變量。使用旗號的主要目標是在並發環境中對公共資源進行行程同步和訪問控制。有兩個wait()和signal()方法可以修改semaphore中的semaphore值。當一個行程改變旗號值時,其他行程可能不會同時改變旗號值。

此外,操作系統將旗號分為兩種:

  • 計數旗號
  • 二進制旗號

計數旗號

在計數旗號時,處理多個資源。它們用count函數初始化,分配資源,直到count達到0。請求資源的任務將被阻塞,它們有一個非限制值域。當添加幾個資源時,計數值增加,當資源數量減少時,計數減少。

二進制旗號

在二進制旗號中,旗號值的範圍是0到1。它類似於互斥鎖,區別在於互斥鎖是一種鎖定方法,而旗號是一種信令方法。當行程需要使用二進制旗號資源時,它會調用wait()方法,將旗號的值從1減少到0。

當行程釋放資源時,它使用signal()方法將旗號值增加到1。當一個行程需要訪問一個資源,並且旗號值為0時,它使用wait()方法阻塞,直到正在使用該資源的當前行程釋放它。

旗號的優缺點

旗號有各種優點和缺點。旗號的一些優點和缺點如下:

優點

  1. 它不允許各種行程進入臨界區。
  2. 不會因為旗號中的忙等待而浪費處理時間或資源。只有滿足特定條件時,才允許行程訪問關鍵區域。
  3. 它允許靈活地管理資源。
  4. 它允許多個執行緒訪問臨界區。

缺點

  1. 必須執行等待和信號方法以避免死鎖。
  2. 如果使用不當,程序可能會被阻塞。這種情況稱為死鎖。
  3. 它會導致優先級倒置,這意味著低優先級的行程可以先訪問臨界區,而高優先級的行程可以稍後再訪問。

自旋鎖和旗號的主要區別

在這裡,您將了解 Spinlock 和 Semaphore 之間的主要區別。Spinlock 和 Semaphore 之間的各種區別如下:

  1. 自旋鎖可用於互斥。相反,旗號可用於互斥或計數旗號。
  2. 自旋鎖只允許一個行程在任何特定時間訪問臨界區。相反,旗號允許多個行程在任何特定時間訪問臨界區。
  3. 自旋鎖可能只有兩個值,即 Locked 和 Unlocked。相反,在旗號中,互斥量將具有值 1 或 0,但如果像旗號一樣使用,它可能具有不同的值。
  4. 自旋鎖一次只允許一個執行緒獲取鎖並繼續執行關鍵部分。相反,旗號允許多個執行緒訪問臨界區。
  5. 自旋鎖是一種低級同步機制。相反,旗號是一種信號機制。
  6. 等待自旋鎖中的鎖的行程將可以立即訪問臨界區,因為該行程將不斷地輪詢鎖。相反,等待旗號鎖的行程可能不會在鎖被釋放後立即進入關鍵部分,因為行程已經進入睡眠狀態,並且在喚醒時會進入關鍵部分。
  7. 自旋鎖是一個忙等待過程。相反,旗號是一個睡眠等待過程。

自旋鎖和旗號之間的頭對頭比較

在這裡,您將了解 Spinlock 和 Semaphore 之間的正面比較。Spinlock 和 Semaphore 之間的各種區別如下:

結論

自旋鎖是一種低級同步方法。安裝簡單快捷。但是,它會浪費系統資源。另一方面,旗號為行程同步問題提供了更高級的SEO解決方案。當它們使等待行程進入睡眠狀態時,它們不會浪費系統資源。儘管如此,如果不小心使用旗號,它們可能會導致死鎖。