加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

線程同步中一定得加鎖嗎

2023/03/02
1603
閱讀需 2 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

線程同步中為了保護(hù)數(shù)據(jù),使程序可以按照預(yù)想的方式運(yùn)行,往往需要加鎖。包括帶判斷的一讀一寫也一樣

線程A:

if(test > 100)

{

testnum=test+10 ;

}
線程B:
test =test-20;

這個執(zhí)行完線程A的if(test > 100)語句后再切換到線程B,執(zhí)行test =test-20;然后再執(zhí)行線程A的testnum=test+10 ;就與預(yù)期結(jié)果不符??梢酝ㄟ^加鎖解決。

線程A:
加鎖:
if(test > 100)
{
testnum=test+10 ;
}
解鎖:
線程B:
加鎖:
test =test-20;
解鎖:

但是有的時候相關(guān)的賦值處于中斷或者中斷回調(diào)函數(shù)中,需要的鎖或者臨界區(qū)需要開關(guān)中斷,頻繁開關(guān)中斷比較影響性能也不太好??梢酝ㄟ^線程或者中斷的優(yōu)先級來處理(中斷的優(yōu)先級肯定是比線程高的)。分兩種情況:

讀的優(yōu)先級比寫的高:

寫了數(shù)據(jù)之后再立刻讀,讀完了再寫。寫完數(shù)據(jù)后通知讀的線程運(yùn)行,讀的優(yōu)先級較高(不會被寫打斷),這樣通過優(yōu)先級區(qū)分讀寫。

寫的優(yōu)先級比讀高:

寫的數(shù)據(jù)往往來源于中斷之類的地方,優(yōu)先級比較高也不該終止,這樣將要讀寫的數(shù)據(jù)存入循環(huán)隊列,這樣通過讀寫隊列中的不同位置來達(dá)到保證數(shù)據(jù)一致性的問題。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜