java面試-Java并發編程(二)——重排序

當我們寫一個單線程程序時,總以為計算機會一行行地運行代碼,然而事實并非如此。

什么是重排序?

重排序指的是編譯器、處理器在不改變程序執行結果的前提下,重新排列指令的執行順序,以達到最佳的運行效率。

重排序分類

重排序分為:編譯器重排序 和 處理器重排序。

數據依賴

編譯器和處理器并不會隨意的改變指令的執行順序,因為有些指令之間是有依賴關系的,若改變了他們的執行順序,就會出現錯誤的結果。?
因此,編譯器和處理器只會對沒有依賴關系的指令進行重排序。

數據依賴:若相鄰的兩條指令訪問同一個變量,并且其中有一條指令執行寫操作,那么這樣的兩條指令之間存在數據依賴。對于有數據依賴關系的指令,不會發生重排序。

數據依賴關系總結一下為以下三種情況:

指令示例
讀后寫a=b;b=1;
寫后寫a=1;a=2;
寫后讀a=1;b=a;

as-if-serial

在單線程開發中,程序員不需要知道指令是如何重排序的,只要簡單地認為指令是按照順序依次執行的即可。這就是as-if-serial的語義,即:貌似是串行的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255169.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《MySQL必知必會》[01] 基本查詢

《MySQL必知必會》(點擊查看詳情)1、寫在前面的話這本書是一本MySQL的經典入門書籍,小小的一本,也受到眾多網友推薦。之前自己學習的時候是啃的清華大學出版社的計算機系列教材《數據庫系統概論》,基礎也算是半罐水&am…

(七)立體標定與立體校正 【計算機視覺學習筆記--雙目視覺幾何框架系列】

七、立體標定與立體校正 這篇博文中,讓玉米和大家一起了解一下,張氏標定是怎樣過渡到立體標定的?在這里主要以雙目立體視覺進行分析。對于雙目立體視覺,我們有兩個攝像頭。它們就像人的一雙眼睛一樣,從不同的方向看世界…

HALCON示例程序edge_segments.hdev提取連續的邊緣段

HALCON示例程序edge_segments.hdev提取連續的邊緣段 示例程序源碼(加注釋) 關于顯示類函數解釋 dev_update_off () dev_close_window () read_image (Image, ‘mreut’) get_image_size (Image, Width, Height) dev_open_window_fit_image (Image, 0, 0…

讓 jQuery UI draggable 適配移動端

背景: 在移動端,本人要實現對某個元素的拖動,想到使用 jQuery UI 的 draggable 功能。但是發現此插件的拖動只支持PC端,不支持移動端。 原因: 原始的 jQuery UI 里,都是mousedown、mousemove、mouseup來描述…

LAMP(7限定某個目錄禁止解析php、 限制user_agent、 PHP相關配置、PHP擴展模塊

限定某個目錄禁止解析php防止***上傳一個目錄文件php&#xff0c;網站會從而解析php,對我們的網站有很大的危險。因此&#xff0c;我們需要在能上傳文件的目錄直接禁止解析PHP代碼禁止步驟1.編輯虛擬主機配置文件&#xff1a;增添內容核心配置文件內容<Directory /data/wwwr…

編譯器的功能是什么

1、編譯器就是將“一種語言&#xff08;通常為高級語言&#xff09;”翻譯為“另一種語言&#xff08;通常為低級語言&#xff09;”的程序。一個現代編譯器的主要工作流程&#xff1a;源代碼 (source code) → 預處理器(preprocessor) → 編譯器 (compiler) → 目標代碼 (obje…

八、走向三維

八、走向三維 我們前面花了七篇博文做鋪墊&#xff0c;我們所做的一切努力都是為了最后的這一擊——立體成像。因為玉米的這個系列文章是對雙目視覺幾何框架的總結。此處跳過匹配&#xff0c;假設左右圖像點的完美匹配的。只看在幾何上&#xff0c;三維坐標是如何被還原的。相對…

通用連接池項目開啟

通用連接池項目開啟 待完善......轉載于:https://www.cnblogs.com/aresyl/p/5552092.html

HALCON示例程序fin.hdev通過形態學檢測缺陷

HALCON示例程序fin.hdev通過形態學檢測缺陷 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_window (‘off’) read_image (Fins, ‘fin’ [1:3]) get_image_size (Fins, Width, Height) dev_close_window () dev_open_window (0, 0, Width[0],…

FEZ前端模塊化工程開發框架

FEZ FEZ 是面向前端模塊化工程的開發框架。主要目的是統一前端開發模式和項目開發結構&#xff0c;自動化前端工作流&#xff0c;提高開發效率和開發質量。使用持續集成等軟件工程的架構模式&#xff0c;集成眾多業界先進的解決方案&#xff0c;讓研發人員更專注于業務邏輯的實…

棧內存和堆內存

堆和棧這兩個字我們已經接觸多很多次&#xff0c;那么具體是什么存在棧中什么存在堆中呢&#xff1f;就拿JavaScript中的變量來說&#xff1a; 首先JavaScript中的變量分為基本類型和引用類型。 基本類型就是保存在棧內存中的簡單數據段&#xff0c;而引用類型指的是那些保存在…

L~M方法

L~M方法&#xff1a; L~M&#xff08;Levenberg-Marquardt&#xff09;方法有些讓人摸不清頭腦。玉米覺得L~M讓人困擾的主要原因有兩點&#xff1a;一是L~M從何而來、二是L~M怎么樣用&#xff1f;因為玉米也不是研究最優化理論的&#xff0c;所以玉米在這里用較為通俗的觀點&a…

Android——Activity去除標題欄和狀態欄

一、在代碼中設置 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去除title requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉Activity上面的狀態欄getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSC…

Ghosts for Tea

Ghosts for Tea 喝茶&#xff1f;鬧鬼&#xff1f; Ten pence for a view over the bay . said the old man with the telescope. Lovely clearmorning. Have a look at the old lighthouse and the remains of the great shipwreckof 1935. “在如此可愛清爽的早晨&#xff0…

HALCON示例程序find_pads.hdev通過fit_rectangle2_contour_xld繪制精準輪廓

HALCON示例程序find_pads.hdev通過fit_rectangle2_contour_xld繪制精準輪廓 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_pc (‘off’) dev_update_window (‘off’) dev_update_var (‘off’) read_image (Image, ‘die_pads’) dev_close_w…

IDEA將項目上傳至碼云/GitHub托管

前言 好久都沒有寫博客了&#xff0c;由于博主之前一直都在上班處于加班的階段&#xff0c;所以根本就沒有時間去學習。現在請假回到學校寫論文&#xff0c;有時間來學習了。 所以會不斷的進行博客的更新&#xff0c;以及分享我在公司學到的一些新的技術&#xff0c;希望大家多…

BZOJ 1937: [Shoi2004]Mst 最小生成樹 [二分圖最大權匹配]

傳送門 題意&#xff1a; 給一張無向圖和一棵生成樹&#xff0c;改變一些邊的權值使生成樹為最小生成樹&#xff0c;代價為改變權值和的絕對值&#xff0c;求最小代價 線性規劃的形式&#xff1a; $Min\quad \sum\limits_{i1}^{m} \delta_i$ $Sat\quad $非樹邊邊權$\ge$生成樹上…

找bug

1.在輸入數據按保存鍵后不知道數據是否已經存入數據庫。 修改&#xff1a;增加一個對數據庫的監聽事件來監聽數據庫是否發生變化。 2.空數據也能保存成功。 修改&#xff1a;增加一個監聽事件來檢測是否輸入數據。 3.在輸入框中輸入不否和輸入框對數據的要求&#xff0c;但不提…

HALCON示例程序forest.hdev識別森林中的樹

HALCON示例程序forest.hdev識別森林中的樹 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_close_window () dev_update_window (‘off’) read_image (Forest, ‘forest_air1’) get_image_size (Forest, Width, Height) dev_open_window (0, 0, Width…

Hadoop學習之路(十八)MapReduce框架Combiner分區

對combiner的理解 combiner其實屬于優化方案&#xff0c;由于帶寬限制&#xff0c;應該盡量map和reduce之間的數據傳輸數量。它在Map端把同一個key的鍵值對合并在一起并計算&#xff0c;計算規則與reduce一致&#xff0c;所以combiner也可以看作特殊的Reducer。 執行combiner操…