POSIX互斥鎖

來源:互聯網
上載者:User
文章目錄
  • 建立與銷毀
  • 對pthread_mutexattr_t的維護
  • 鎖操作
  • 其它
建立與銷毀
  • 靜態初始化   
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  • 動態初始化
int pthread_mutex_init (pthread_mutex_t * mutex, const pthread_mutexattr_t * attr)
struct pthread_mutexattr_t{enum lock_type    // 使用pthread_mutexattr_settype來更改{PTHREAD_MUTEX_TIMED_NP [default]//當一個線程加鎖後,其餘請求鎖的線程形成等待隊列,在解鎖後按優先順序獲得鎖。PTHREAD_MUTEX_ADAPTIVE_NP// 動作最簡單的鎖類型,解鎖後所有線程重新競爭。PTHREAD_MUTEX_RECURSIVE_NP// 允許同一線程對同一鎖成功獲得多次。當然也要解鎖多次。其餘線程在解鎖時重新競爭。PTHREAD_MUTEX_ERRORCHECK_NP// 若同一線程請求同一鎖,返回EDEADLK,否則與PTHREAD_MUTEX_TIMED_NP動作相同。} type;} attr;// 若NULL則使用預設屬性
  • 動態銷毀
int pthread_mutex_destroy (pthread_mutex_t * mutex)

在Linux中,互斥鎖不佔用任何資源,因此該函數只檢查鎖狀態,若為鎖定則返回EBUSY。

對pthread_mutexattr_t的維護
int pthread_mutexattr_init (pthread_mutexattr_t * attr);int pthread_mutexattr_destroy (pthread_mutexattr_t * attr);int pthread_mutexattr_getpshared (const pthread_mutexattr_t * attr, int * pshared);int pthread_mutexattr_setpshared (pthread_mutexattr_t * attr, int pshared);int pthread_mutexattr_settype (pthread_mutexattr_t * attr, int kind);int pthread_mutexattr_gettype (pthread_mutexattr_t * attr, int * kind);

鎖操作

  • 不論哪種類型的鎖,都不可能被兩個不同的線程同時得到,而必須等待解鎖。
  • 關於解鎖者:
  1. 對於普通鎖和適應鎖類型,解鎖者可以是同進程內任何線程
  2. 對於嵌套鎖,文檔和實現要求必須由加鎖者解鎖,但實驗結果表明並沒有這種限制
  3. 檢錯鎖必須由加鎖者解鎖才有效,否則返回EPERM    -
int pthread_mutex_lock (pthread_mutex_t * mutex);int pthread_mutex_unlock (pthread_mutex_t * mutex);int pthread_mutex_trylock (pthread_mutex_t * mutex);//在鎖已經被佔據時返回EBUSY而不是掛起等待
其它
  • POSIX線程鎖機制的Linux實現都不是取消點,因此,延遲取消類型的線程不會因收到取消訊號而離開加鎖等待。
  • 線程在加鎖後解鎖前被取消,鎖將永遠保持鎖定狀態。因此如果在關鍵區段內有取消點存在,或者設定了非同步取消類型,則必須在退出回呼函數中解鎖。
  • 鎖機制不是非同步訊號安全的,也就是說,不應該在訊號處理過程中使用互斥鎖,否則容易造成死結。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.