日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言用户态锁使用,用户态自旋锁、读写自旋锁及互斥锁

發布時間:2024/1/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言用户态锁使用,用户态自旋锁、读写自旋锁及互斥锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、自旋鎖

自旋鎖最多可能被一個可執行線程所持有。一個被征用的自旋鎖使得請求它的線程在等待鎖重新可用時自旋(特別浪費處理器時間)。所以自旋鎖不應該被長時間持有。

自旋鎖是不可遞歸的!

(1)自旋鎖相關函數

用戶態的自旋鎖相關函數包含在頭文件中。

相關函數:

int pthread_spin_destroy(pthread_spinlock_t *lock);

銷毀自旋鎖lock,并且回收被鎖lock使用的任何資源。

int pthread_spin_init(pthread_spinlock_t *lock, int pshared);

分配使用自旋鎖lock所需要的資源,并且初始化鎖lock為未鎖狀態。

int pthread_spin_lock(pthread_spinlock_t *lock);

鎖住自旋鎖lock。當鎖沒有被某個線程持有時,調用的線程將獲得鎖,否則線程將不斷自旋,知道鎖可用。

int pthread_spin_trylock(pthread_spinlock_t *lock);

如果鎖沒有被某個線程持有,自旋鎖lock將被鎖住,否則將會失敗。

int pthread_spin_unlock(pthread_spinlock_t *lock);

釋放被鎖住的自旋鎖lock。

(2)基本使用形式

pthread_spin_init(&lock, 0);

pthread_spin_lock(&lock);

/*臨界區資源…*/

pthread_spin_unlock(&lock);

pthread_spin_destroy(&lock);

真正需要保護的是數據而不是代碼,采用特定的鎖保護自己的共享數據。

2、讀-寫自旋鎖

有時,鎖的用途可以明確分為讀取和寫入兩個場景。對一個鏈表可能既要更新又要檢索。當更新(寫入)連寶石,不能有其他代碼并發地寫或者讀鏈表,寫操作要求完全的護持。另一方面,當對其檢索(讀取)鏈表時,只要求其他程序不對鏈表進行寫操作就行了,可以有多個并發的讀操作。類似于這種情況,就可以通過讀-寫鎖進型保護。

這種鎖的機制照顧寫要多一點,因此,非常適用于讀操作遠多于寫操作的場景,能提高效率。

(1)讀-寫鎖相關函數

用戶態的讀-寫鎖相關函數包含在頭文件中。

int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,

constpthread_rwlockattr_t *restrict attr);//初始化鎖

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);//加讀鎖

int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);//加寫鎖

int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);//解鎖

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);//銷毀鎖

讀-寫自旋鎖的基本使用形式跟自旋鎖差不多。

3、互斥鎖

互斥鎖說白了就是一種互斥的排他鎖-——好比允許睡眠的自旋鎖。

(1)互斥鎖相關的函數

用戶態的互斥鎖相關函數包含在頭文件中。

int pthread_mutex_init(pthread_mutex_t *restrict mutex,

constpthread_mutexattr_t *restrict attr);//初始化鎖

int pthread_mutex_lock(pthread_mutex_t *mutex);//加鎖

int pthread_mutex_unlock(pthread_mutex_t *mutex);//解鎖

int pthread_mutex_destroy(pthread_mutex_t *mutex);//銷毀鎖

(2)基本使用形式

pthread_mutex_init(&mutex);

pthread_mutex_lock(&mutex);//加鎖

/*臨界區…*/

pthread_mutex_unlock(&mutex);//解鎖

自旋鎖與互斥鎖使用對比

需求

建議的加鎖方法

低開銷加鎖

優先使用自旋鎖

短期鎖定

優先使用自旋鎖

長期加鎖

優先使用互斥鎖

持有鎖需要睡眠

使用互斥鎖

總結

以上是生活随笔為你收集整理的c语言用户态锁使用,用户态自旋锁、读写自旋锁及互斥锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。