淺談volatile在i++情況下失效
概述
如果你對volatile不陌生的話,應該會知道volatile能夠保證共享變數對執行緒的可見性。
那為什麼volatile無法保證 i++ 操作的執行緒可見性呢?
分析
假設i的初始值為0,現有兩個執行緒,分別為執行緒1和執行緒2進行 i++ 操作,我們來分析一下為什麼會出現錯誤。
首先,i++並不是原子操作,我們可以將這個操作拆分為3個步驟。
- 執行緒從主記憶體把遍歷載入到快取。
- 執行緒執行i++操作。
- 執行緒將i的新值重新整理到主記憶體。
那麼進行如下過程,則會發生執行緒安全問題。
- 執行緒1將變數載入到快取。但是還沒有執行 i++ 操作。
- 執行緒2將變數載入到快取,然後執行i++操作。
- 由於執行緒2快取變數已經發生了變化,使得執行緒1的快取行無效。
- 按我們以前的理解,由於執行緒1快取行無效,那執行緒1應該主動去主記憶體load最新的值。而實際上並不是這樣的,volatile的作用並不是在變數改變的時候,讓其他執行緒重新載入主記憶體的變數值,而是置其他執行緒快取內的變數值無效。也就是說,此時執行緒1並不會重新去從主記憶體載入i的值,而是繼續進行i++操作,導致資料錯誤。
相關推薦
淺談volatile在i++情況下失效
概述 如果你對volatile不陌生的話,應該會知道volatile能夠保證共享變數對執行緒的可見性。 那為什麼volatile無法保證 i++ 操作的執行緒可見性呢? 分析 假設i的初始值為0,現有兩個執行緒,分別為執行緒1和執行緒2進行 i++ 操作,我們來分析一下為什麼
淺談linux系統下的權限管理和進程及服務的控制
cal water 控制 權限列表 The 加載 pro 進程查看 e30 一、文件權限的管理 1、權限存在意義為了安全2、權限的識別ls -l file 文件的權限ls -ld dir 目錄的權限3、權限的查看與理解 rw-r--r-- 1 root r
淺談SDN架構下的運維工作
導讀 目前國內的網路運維還處於初級階段,工作人員每天就像救火一樣,天天疲於奔命。運維人員只能埋頭查詢系統執行的日誌,耗時耗力,老眼昏花不說,有時候忙了半天還一無所獲,作為運維工程師的你,有木有遇到過類似苦逼的經歷? 目前國內的網路運維還處於初級階段,工作人員
以使用者註冊功能模組為例淺談MVC架構下的JavaWeb開發流程
JavaWeb應用開發,撇開分散式不談,只討論一個功能服務應用的開發,無論是使用原生的Servlet/JSP方案,還是時下的SSM架構,都有一套經過工程實踐考驗的最佳實踐,這綜合考慮了團隊協作、專案管理、可用性等方方面面的問題。 一些約定 考慮到專案管理的方便,一般前端不能直接訪問到jsp頁面,而是必須通
說說java中傳容器某些情況下失效
樓主今天寫個方法移除map集合中的空值,遇到個問題,就是對容器操作後,發現失效了;先上程式碼 public static void removeValueNullAndEmpty(Map<String,String> A) { Map<Str
淺談網際網路金融下的IT架構要求
前言:本文只代表筆者個人觀點。 本文參考文獻: 1.《銀行資訊系統架構》:王漢明。 2. 紅帽Openshift相關技術資料 3. 網際網路相關材料 近兩年,“網際網路金融”這個詞非常火,談到金融行業資訊系統架構,不提這個詞兒好像就特別low。那麼,這個詞是不是也像其他概念,是IT廠商或者諮詢廠商“
淺談BloomFilter【下】用Java實現BloomFilter
通過前一篇文章的學習,對於 BloomFilter 的概念和原理,以及誤報率等計算方法都一個理性的認識了。在這裡,我們將用 Java'實現一個簡單的 BloomFilter 。 package pri.xiaoye.day1029; import java.io.Ser
淺談可變性剪下
可變剪下是一個過程,及主要基因或者mRNA前體轉錄所產生的RNA的外顯子以多種方式通過RNA剪下進行重連,由此產生的不同的基因可能被翻譯成不同的蛋白質構體,因此,一個基因可能編碼多種蛋白質。 可變剪下與蛋白質組多樣性 人體基因組可能有約35000個基因,果蠅約140
淺談各種瀏覽器下的CSS Hack相容性寫法
這篇文章主要介紹了各種瀏覽器下的CSS Hack相容性寫法,CSS Hack大致可以分為內部Hack和選擇器Hack以及HTML頭部引用Hack,需要的朋友可以參考下。 由於不同瀏覽器所遵循的標準也有所不同,再加上不可避免的程式bug、經濟利益等因素的干擾。同樣的網頁程式
淺談:Android下的external原始碼目錄
對於Android這個龐大的系統,其原始碼佔據了10多G的地盤。當初次做Android移植時,例如要進行藍芽模組、wifi模組移植時,external目錄下的原始碼對你就很重要了。 原始碼目錄 external / |—— alsa-lib ALSA 音訊系統程
淺談限流(下)實戰
常見的應用限流手段 應用開發中常見的限流的都有哪些呢?其實常用的限流手段都比較簡單,關鍵都是限流服務的高併發。為了在LB上實現高效且有效的限流,普遍的做法都是Nginx+Lua或者Nginx+Redis去實現服務服務限流,所以市面上比較常用的waf框架都是基於Openresty去實現的。我們看下比較常用的幾個
淺談Linux環境下Socket選項的設定
0.前言 TCP/IP協議棧是Linux核心的重要組成部分和網路程式設計的基石,雖然Linux和BSD有很大的聯絡,但是對於某些Socket選項和核心操作仍然存在差異,因此文中適用場景均為CentOS環境。 《UNIX網路程式設計》是已故UNIX網路專家W. Richard Stevens博士(1951-19
iscroll5在使用情況下click事件失效的問題
問題 技術 進行 alt false sil turn 設備 word 轉載自:http://www.52html5.com/?p=2618 Bug描述: iOS、android4.4+下不能觸發click事件。 Bug解決: 調用iscroll插件,增加配置參數:
淺談“互聯網+”浪潮下傳統行業的戰略轉型
導致 促銷 缺少 代金券 升級 信息技術 不明確 合作 企業信息 “互聯網+”時代來臨,越來越多的互聯網企業入侵傳統行業,越來越多的傳統企業面臨戰略轉型。對於互聯網企業來說,快速的產品推廣和靈活的用戶運營是他們的優勢,但是在線下門店,服務和產品質量上存在先天不足,並且短時間
【Vue】淺談Vue不同場景下組件間的數據交流
事件 不同 name usm quest 數據流 這就是 ring des 淺談Vue不同場景下組件間的數據“交流” Vue的官方文檔可以說是很詳細了。在我看來,它和react等其他框架文檔一樣,講述的方式的更多的是“方法論&
淺談運營商網絡業務限速(下)
qppb 前文曾提及QPPB技術,近期恰巧測試NE40設備,於是,對該技術也進行了測試。科普:QPPB(Qos Policy Propagation Through the Border Gateway Protocol)是通過BGP傳播QoS策略的簡稱,優勢是通過BGP路由發送者設置BGP屬性,預先對
淺談線程池(下):相關試驗及註意事項
DG 執行 html ble DC resp lin 不足 4.0 三個月,整整三個月了,我忽然發現我還有三個月前的一個小系列的文章沒有結束,我還欠一個試驗!線程池是.NET中的重要組件,幾乎所有的異步功能依賴於線程池。之前我們討論了線程池的作用、獨立線程池的存在意義,以及
淺談安卓按鍵下的變量命名
技術 登錄 麻煩 設置 ID tps str 定義 img 一般我們在安卓按鍵下定義變量 比如dim a,b,c,d 測試代碼的時候學習知識的時候的確足夠用了 但是一旦腳本規模比較大 整個腳本的流程比較長 如果用這種 變量名a,b c,d 不單單是容易重復沖突 還可能會
Linux下用戶和組之淺談
ack 總結 d參數 修改密碼 group 分享 password 使用 多個 關於Linux下用戶和組的總結。用戶:獲取系統資源權限的集合:組:具有相同權限的用戶的集合用戶組分類; 1.普通用戶組:可以加入多個用戶 2.系統組:一般加入一些系統用戶
極限工坊淘小咖淺談:實體餐飲業的變革,線上擁抱線下,小程序的新零售
利用 網上 積分 新希望 都是 微信小程序 新的 附近 第三方服務 隨著互聯網的極速發展,人們的日常生活節奏逐漸加快,實體商家的經營的商鋪營業額已經到達率了瓶頸期,一些經常關註互聯網的商家早已經察覺小程序這是個新的風口,而互聯網的發展,也已經讓實體商家不得不做起線上+線下的