鎖和訊號量的理解

2021-10-16 16:50:42 字數 703 閱讀 6218

相同點:

差異:

pthread_mutex_init();

pthread_mutex_destroy();

pthread_mutex_lock();

pthread_mutex_trylock();//輪詢方式加鎖

pthread_mutex_unlock();

非0即1的方式訪問臨界區,只能是獲得鎖的物件才能訪問臨界區,進入臨界區之前pthread_mutex_lock,其他物件就無法進去臨界區,只有等待獲取鎖的物件pthread_mutex_unlock出了臨界區之後,其他物件才能獲取鎖進入臨界區。   

注意點:有時候有些老版本的linux裝置,如果有乙個物件經常獲取不到鎖,沒法進入臨界區,有可能會導致該物件的執行緒優先順序被降低,導致更難獲取鎖。

sem_init()

sem_destroy()

sem_wait()

sem_post()

post相當於+1, wait的時候,只有訊號量的值大於1時,才能得到訊號,要不然就阻塞再wait那裡。

如: a -> post, b -> post  然後wait可以得到兩次訊號量,第三次就阻塞再wait處。

ps:gcc提供了原子操作方法: __sync_add_and_fetch等。

c++11也支援原子運算元據型別如std::atomic_int

C Semaphore 訊號量 鎖 簡單理解

概念解釋 訊號量就是乙個停車場。當前值是停車場裡還剩下多少個空車位。最大值是停車場裡最多能容納多少個車位。當汽車進入停車場時,首先要在門口排隊 sem wait 得到進入許可後才能進入。排隊順序原則上先到先得。每進一輛車,停車場就少了1個停車位,即訊號量當前值 1。當前值為0時,停車場停滿了,所有車...

自旋鎖和訊號量

核心同步措施 用於linux核心 為了避免併發,防止競爭。核心提供了一組同步方法來提供對共享資料的保護。我們的重點不是介紹這些方法的詳細用法,而是強調為什麼使用這些方法和它們之間的差別。linux使用的同步機制可以說從2.0到2.6以來不斷發展完善。從最初的原子操作,到後來的訊號量,從大核心鎖到今天...

自旋鎖和訊號量

今天在閱讀核心 時遇到了自旋鎖函式,於是查閱資料,學習了一下自旋鎖和訊號量的知識。自旋鎖 自旋鎖是專為防止多處理器併發而引入的一種鎖,它應用於中斷處理等部分。對於單處理器來說,防止中斷處理中的併發可簡單採用關閉中斷的方式,不需要自旋鎖。自旋鎖最多只能被乙個核心任務持有,如果乙個核心任務試圖請求乙個已...