linux執行緒同步方式是什麼?常見的有哪些?

老男孩IT教育機構發表於2022-10-12

  Linux系統中,實現執行緒同步的方式大致分為六種,其中包括:互斥鎖、自旋鎖、訊號量、條件變數、讀寫鎖、屏障。其中最常用的執行緒同步方式就是互斥鎖、自旋鎖、訊號量,本文為大家重點講解一下。

  1、互斥鎖

  互斥鎖本質就是一個特殊的全域性變數,擁有lock和unlock兩種狀態,unlock的互斥鎖可以由某個執行緒獲得,當互斥鎖由某個執行緒持有後,這個互斥鎖會鎖上變成lock狀態,此後只有該執行緒有權力開啟該鎖,其他想要獲得該互斥鎖的執行緒都會阻塞,直到互斥鎖被解鎖。

  互斥鎖的型別:

  ①普通鎖:互斥鎖預設型別。當一個執行緒對一個普通鎖加鎖以後,其餘請求該鎖的執行緒將形成一個等待佇列,並在鎖解鎖後按照優先順序獲得它,這種鎖型別保證了資源分配的公平性。一個執行緒如果對一個已經加鎖的普通鎖再次加鎖,將引發死鎖;對一個已經被其他執行緒加鎖的普通鎖解鎖,或者對一個已經解鎖的普通鎖再次解鎖,將導致不可預期的後果。

  ②檢錯鎖:一個執行緒如果對一個已經加鎖的檢錯鎖再次加鎖,則加鎖操作返回EDEADLK;對一個已經被其他執行緒加鎖的檢錯鎖解鎖或者對一個已經解鎖的檢錯鎖再次解鎖,則解鎖操作返回EPERM。

  ③巢狀鎖:該鎖允許一個執行緒在釋放鎖之前多次對它加鎖而不發生死鎖;其他執行緒要獲得這個鎖,則當前鎖的擁有者必須執行多次解鎖操作;對一個已經被其他執行緒加鎖的巢狀鎖解鎖,或者對一個已經解鎖的巢狀鎖再次解鎖,則解鎖操作返回EPERM。

  ④預設鎖:一個執行緒如果對一個已經解鎖的預設鎖再次加鎖,或者對一個已經被其他執行緒加鎖的預設鎖解鎖,或者對一個解鎖的預設鎖解鎖,將導致不可預期的後果;這種鎖實現的時候可能被對映成上述三種鎖之一。

  2、自旋鎖

  自旋鎖顧名思義就是一個死迴圈,不停的輪詢,當一個執行緒未獲得自旋鎖時,不會像互斥鎖一樣進入阻塞休眠狀態,而是不停的輪詢獲取鎖,如果自旋鎖能夠很快被釋放,那麼效能就會很高,如果自旋鎖長時間不能夠被釋放,甚至裡面還有大量的IO阻塞,就會導致其他獲取鎖的執行緒一直空輪詢,導致CPU使用率達到100%,特別CPU時間。

  3、訊號量

  訊號量是一個計數器,用於控制訪問有限共享資源的執行緒數。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2917968/,如需轉載,請註明出處,否則將追究法律責任。

相關文章