亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

到底什么是爭用條件?為什么能量會不守恒

當from里能量少于amount時候,返回return。為什么這里就會產生爭用條件呢?為什么只要讓這里開始wait

正在回答

1 回答

這里存在一個概念性問題:工作內存 和? 主內存

線程操作數據時:會將主內存中的數值read ->load 到工作內存中

線程操作完成后:工作內存中的數據 store ->write 到主內存中

https://img1.sycdn.imooc.com//5ad80b690001765507950508.jpg

這里畫了一個圖解釋一下:

線程1獲取到資源后進行一系列的操作(獲取到a ,并進行修改為5500,還未來得及再次寫去主內存中),在某一時刻線程進入了阻塞狀態;

此時線程2隆重登場 :線程而進行了全套操作(獲取到a ,并進行修改為5900,再存入主內存中),此時資源a被釋放,線程1繼續操作,將5500寫入主內存中,

全程a的變化為 :5000->5900->5500也就是最終值為5500,而在線程2操作時有一個數組數值減少了900,線程1操作時有一個數組數值減少了500,這里a只多了500,所以就造成不守恒了。(因為操作哪一個數是隨機的,這里操作目標數值是同一個 a )。

當返回return后,EnergySystemTest中的一個循環結束,這個循環后面的代碼也不會去執行,而新的一個循環開始時就有可能爭用數據a ,這里造成了爭用產生。

使用wait 后,當線程1操作被中斷后進入wait set集合等待,只有線程完全執行完以后,調用notify方法,此時才能喚醒線程繼續往下執行。

注意兩個方法區別:return 會讓兩個線程只有一次最終結果的輸出;wait可以有兩次輸出。


2 回復 有任何疑惑可以回復我~
#1

慕瓜7073846 提問者

非常感謝!
2018-04-19 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

到底什么是爭用條件?為什么能量會不守恒

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號