日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

我們一起聊聊從操作系統層面理解多線程沖突

來源: 責編: 時間:2024-04-19 09:28:05 218觀看
導讀前言今天來從操作系統層面理解一下多線程沖突的問題,話不多說,開始~~什么是多線程的沖突同一進程內的線程是共享同一內存空間的,所以在多個線程的進程里,線程是可以同時操作這個進程空間的數據的,線程之間可以共享進程的資

前言

今天來從操作系統層面理解一下多線程沖突的問題,話不多說,開始~~CsM28資訊網——每日最新資訊28at.com

CsM28資訊網——每日最新資訊28at.com

什么是多線程的沖突

同一進程內的線程是共享同一內存空間的,所以在多個線程的進程里,線程是可以同時操作這個進程空間的數據的,線程之間可以共享進程的資源:比如代碼段、堆空間、數據段、打開的文件等資源,但每個線程也有自己獨立的??臻g。如果多個線程如果競爭共享資源,如果不采取有效的措施,則會造成共享數據的混亂。CsM28資訊網——每日最新資訊28at.com

舉個小栗子:一個房子里(代表一個進程),只有一個廁所(代表共享資源)。屋子里面有兩個人A和B(代表兩個線程),共用這個廁所。一天A去上廁所了,不過廁所門的鎖壞了,就沒法鎖門。這是B也想去上廁所,直接就開門進去了,然后發現A在里面。CsM28資訊網——每日最新資訊28at.com

上面這個故事說明,對于共享資源,如果沒有上鎖,在多線程的環境里,那么就可能會發生翻車現場。CsM28資訊網——每日最新資訊28at.com

競爭與協作

做個小實驗,創建五個線程,它們分別對共享變量 i 自增 1 執行 1000 次CsM28資訊網——每日最新資訊28at.com

package com.atguigu.juc.atomics;public class Station{    int i = 0;    public void add() {        for(int m = 0; m < 1000; m++){            try {                //使用sleep()模擬業務時間,如果不加,大概率不會出現并發問題                Thread.sleep(1);                i += 1;            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    public static void main(String[] args) throws InterruptedException {        //實例化站臺對象,并為每一個站臺取名字        Station station = new Station();        new Thread(station::add,"線程1").start();        new Thread(station::add,"線程2").start();        new Thread(station::add,"線程3").start();        new Thread(station::add,"線程4").start();        new Thread(station::add,"線程5").start();        Thread.sleep(20000);        // 讓每一個站臺對象各自開始工作        System.out.println(station.i);        Thread.sleep(5000);        System.out.println(station.i);    }}

運行了幾次發現,每次運行得到不同的結果。在計算機里是不能容忍的,雖然是小概率出現的錯誤,但是小概率事件它一定是會發生的。CsM28資訊網——每日最新資訊28at.com

為什么會出現這樣的問題呢?CsM28資訊網——每日最新資訊28at.com

為了理解為什么會發生這種情況,我們必須了解編譯器為更新計數器 i 變量生成的代碼序列,也就是要了解匯編指令的執行順序。CsM28資訊網——每日最新資訊28at.com

在這個例子中,我們只是想給 i 加上數字 1,那么它對應的匯編指令執行過程是這樣的:CsM28資訊網——每日最新資訊28at.com

CsM28資訊網——每日最新資訊28at.com

可以發現,只是單純給 i 加上數字 1,在 CPU 運行的時候,實際上要執行 3 條指令。CsM28資訊網——每日最新資訊28at.com

設想我們的線程 1 進入這個代碼區域,它將 i 的值(假設此時是 50 )從內存加載到它的寄存器中,然后它向寄存器加 1,此時在寄存器中的 i 值是 51。CsM28資訊網——每日最新資訊28at.com

現在,一件不幸的事情發生了:當前線程被掛起了,線程 2 被調度運行,并進入同一段代碼。它也執行了第一條指令,從內存獲取 i 值并將其放入到寄存器中,此時內存中 i 的值仍為 50,因此線程 2 寄存器中的 i 值也是 50。假設線程 2 執行接下來的兩條指令,將寄存器中的 i 值 + 1,然后將寄存器中的 i 值保存到內存中,于是此時全局變量 i 值是 51。CsM28資訊網——每日最新資訊28at.com

最后,又發生一次上下文切換,線程 1 恢復執行。還記得它已經執行了兩條匯編指令,現在準備執行最后一條指令。回憶一下, 線程 1 寄存器中的 i 值是51,因此,執行最后一條指令后,將值保存到內存,全局變量 i 的值再次被設置為 51。CsM28資訊網——每日最新資訊28at.com

簡單來說,增加 i (值為 50 )的代碼被運行兩次,按理來說,最后的 i 值應該是 52,但是由于不可控的調度,導致最后 i 值卻是 51。CsM28資訊網——每日最新資訊28at.com

針對上面線程 1 和線程 2 的執行過程,我畫了一張流程圖,會更明確一些:CsM28資訊網——每日最新資訊28at.com

CsM28資訊網——每日最新資訊28at.com

互斥的概念

上面展示的情況稱為競爭條件(race condition),當多線程相互競爭操作共享變量時,由于運氣不好,即在執行過程中發生了上下文切換,我們得到了錯誤的結果,事實上,每次運行都可能得到不同的結果,因此輸出的結果存在不確定性(indeterminate)。CsM28資訊網——每日最新資訊28at.com

由于多線程執行操作共享變量的這段代碼可能會導致競爭狀態,因此我們將此段代碼稱為臨界區(critical section),它是訪問共享資源的代碼片段,一定不能給多線程同時執行。CsM28資訊網——每日最新資訊28at.com

我們希望這段代碼是互斥(mutualexclusion)的,也就說保證一個線程在臨界區執行時,其他線程應該被阻止進入臨界區,說白了,就是這段代碼執行過程中,最多只能出現一個線程。CsM28資訊網——每日最新資訊28at.com

CsM28資訊網——每日最新資訊28at.com

另外,說一下互斥也并不是只針對多線程。在多進程競爭共享資源的時候,也同樣是可以使用互斥的方式來避免資源競爭造成的資源混亂。CsM28資訊網——每日最新資訊28at.com

同步的概念

所謂同步,就是并發進程/線程在一些關鍵點上可能需要互相等待與互通消息,這種相互制約的等待與互通信息稱為進程/線程同步。CsM28資訊網——每日最新資訊28at.com

上面那個栗子:一A去上廁所了,發現廁所門的鎖壞了,告訴B一聲。這是B想去上廁所的話,就會先問一下A是不是還在里面,然后再開門進去了。這也是互通消息的方式,如果鎖沒有壞,A直接把門鎖上,這就是相互等待的方式。CsM28資訊網——每日最新資訊28at.com

怎么解決多線程沖突?

為了實現進程/線程間正確的協作,操作系統必須提供實現進程協作的措施和方法,主要的方法有兩種:CsM28資訊網——每日最新資訊28at.com

  • 鎖:加鎖、解鎖操作;
  • 信號量:P、V 操作;

這兩個都可以方便地實現進程/線程互斥,而信號量比鎖的功能更強一些,它還可以方便地實現進程/線程同步。CsM28資訊網——每日最新資訊28at.com

使用加鎖操作和解鎖操作可以解決并發線程/進程的互斥問題。CsM28資訊網——每日最新資訊28at.com

任何想進入臨界區的線程,必須先執行加鎖操作。若加鎖操作順利通過,則線程可進入臨界區;在完成對臨界資源的訪問后再執行解鎖操作,以釋放該臨界資源。CsM28資訊網——每日最新資訊28at.com

CsM28資訊網——每日最新資訊28at.com

信號量

信號量是操作系統提供的一種協調共享資源訪問的方法。通常信號量表示資源的數量,對應的變量是一個整型(sem)變量。CsM28資訊網——每日最新資訊28at.com

另外,還有兩個原子操作的系統調用函數來控制信號量的,分別是:CsM28資訊網——每日最新資訊28at.com

  • P 操作:將 sem 減 1,相減后,如果 sem < 0,則進程/線程進入阻塞等待,否則繼續,表明 P 操作可能會阻塞;
  • V 操作:將 sem 加 1,相加后,如果 sem <= 0,喚醒一個等待中的進程/線程,表明 V 操作不會阻塞;

舉個類比,2 個資源的信號量,相當于 2 條火車軌道,PV 操作如下圖過程:CsM28資訊網——每日最新資訊28at.com

CsM28資訊網——每日最新資訊28at.com


CsM28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-84017-0.html我們一起聊聊從操作系統層面理解多線程沖突

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C#中的正則表達式:強大的文本處理工具

下一篇: WPF界面魔法:探秘Template奇妙世界,個性化定制你的UI

標簽:
  • 熱門焦點
  • 小米降噪藍牙耳機Necklace分享:聽一首歌 讀懂一個故事

    在今天下午的小米Civi 2新品發布會上,小米還帶來了一款新的降噪藍牙耳機Necklace,我們也在發布結束的第一時間給大家帶來這款耳機的簡單分享?,F在大家能見到最多的藍牙耳機
  • iPhone賣不動了!蘋果股價創年內最大日跌幅:市值一夜蒸發萬億元

    8月5日消息,今天凌晨美股三大指數高開低走集體收跌,道指跌0.41%;納指跌0.36%;標普500指數跌0.52%。熱門科技股也都變化極大,其中蘋果報181.99美元,跌4.8%,創
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準追劇女孩們的古偶劇集,2021年有優酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 花7萬退貨退款無門:誰在縱容淘寶珠寶商家造假?

    來源:極點商業作者:楊銘在淘寶購買珠寶玉石后,因為保證金不夠賠付,店鋪關閉,退貨退款難、維權無門的比比皆是。&ldquo;提供相關產品鑒定證書,支持全國復檢,可以30天無理由退換貨。&
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當家&rdquo;的盒馬,開始加速謀生了。據盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經與
  • OPPO K11搭載高性能石墨散熱系統:旗艦同款 性能涼爽釋放

    日前OPPO官方宣布,將于7月25日14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣點就是將配備索尼
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美天堂亚洲电影院在线播放| 午夜综合激情| 伊人色综合久久天天| 在线电影国产精品| 亚洲精品国精品久久99热| 一区二区三区日韩精品| 亚洲欧美日韩一区| 久久蜜桃香蕉精品一区二区三区| 美脚丝袜一区二区三区在线观看| 欧美国产先锋| 国产精品视频网| 精东粉嫩av免费一区二区三区| 亚洲精品一区二区三区99| 亚洲自拍都市欧美小说| 久久深夜福利免费观看| 欧美另类综合| 国产女优一区| 亚洲黄色一区二区三区| 亚洲一区二区三区777| 久久久五月天| 欧美精品一区二区三区在线播放| 国产精品亚发布| 亚洲激情一区二区| 欧美一区不卡| 欧美另类综合| 极品尤物久久久av免费看| 亚洲小少妇裸体bbw| 久久在线免费视频| 国产精品色午夜在线观看| 伊人婷婷欧美激情| 亚洲一区影院| 欧美精品v国产精品v日韩精品| 国产日韩一区二区三区在线播放| 亚洲精品美女在线| 久久久久久久综合狠狠综合| 欧美午夜电影网| 亚洲国产高清一区二区三区| 亚洲欧美伊人| 欧美日韩日本视频| 在线免费日韩片| 欧美一区亚洲| 国产精品高清免费在线观看| 亚洲国产一区在线| 久久久久久亚洲精品不卡4k岛国| 国产精品www| 亚洲精品视频免费在线观看| 久久蜜桃av一区精品变态类天堂| 国产精品区免费视频| 日韩一区二区高清| 欧美1区2区3区| 狠狠色2019综合网| 午夜精品视频一区| 欧美香蕉视频| 999亚洲国产精| 欧美成人一区二区三区片免费| 韩日精品中文字幕| 羞羞漫画18久久大片| 欧美午夜欧美| 一区二区三区高清不卡| 欧美国产视频一区二区| 亚洲福利在线视频| 久久亚洲美女| 黄色一区二区在线观看| 欧美在线一级va免费观看| 国产精品人人爽人人做我的可爱| 一区二区欧美日韩| 欧美日韩精品欧美日韩精品| 亚洲精品日韩综合观看成人91| 欧美大尺度在线| 亚洲国产欧美一区二区三区同亚洲 | 国产欧美日韩在线视频| 国产精品99久久久久久久vr| 欧美日韩视频专区在线播放| 亚洲精品美女在线观看播放| 欧美va亚洲va日韩∨a综合色| 黑人中文字幕一区二区三区 | 欧美成人官网二区| 在线观看三级视频欧美| 久久香蕉国产线看观看av| 国产一区二区三区日韩| 欧美在线视频a| 国产日韩精品一区二区浪潮av| 亚洲欧美日韩视频二区| 国产精品女主播在线观看| 亚洲在线观看视频| 国产精品麻豆va在线播放| 亚洲综合视频网| 国产精品萝li| 欧美在线一二三区| 影音先锋日韩有码| 欧美成人按摩| 999亚洲国产精| 国产精品视频xxxx| 欧美影视一区| 红桃视频国产精品| 欧美a级理论片| 亚洲美女黄色片| 国产精品成人v| 欧美一区二区三区四区在线| 国产又爽又黄的激情精品视频| 久久免费少妇高潮久久精品99| 在线精品视频免费观看| 欧美高清视频www夜色资源网| 99re热这里只有精品视频 | 亚洲精品国产精品国自产观看| 欧美日韩国产色站一区二区三区| 中文在线资源观看网站视频免费不卡| 国产精品久久久久久久久久久久久久 | 亚洲日本电影在线| 欧美日韩国产麻豆| 亚洲综合大片69999| 国产亚洲在线| 牛人盗摄一区二区三区视频| 亚洲美女少妇无套啪啪呻吟| 国产精品地址| 久久久久久久久久久久久女国产乱 | 久久久xxx| 亚洲精品美女在线观看播放| 国产精品乱码妇女bbbb| 欧美中日韩免费视频| 亚洲高清不卡在线观看| 欧美日韩视频| 久久精品日韩欧美| 亚洲免费观看高清在线观看 | 亚洲人成久久| 国产精品视频一区二区三区| 久久婷婷成人综合色| 99国产精品久久久久老师| 国产伦精品免费视频| 欧美大片一区二区三区| 亚洲自拍偷拍网址| 亚洲国产精品一区二区www| 国产精品多人| 蜜臀99久久精品久久久久久软件| 亚洲视屏一区| 在线日韩成人| 国产精品成人va在线观看| 久久尤物视频| 亚洲一区二区三区在线视频| 樱桃成人精品视频在线播放| 欧美日一区二区三区在线观看国产免| 久久国产欧美精品| 一本色道久久综合一区| 国产一区91| 欧美日韩国产黄| 久久久欧美一区二区| 亚洲夜间福利| 亚洲黄色在线看| 国产欧美一区二区视频| 欧美精品一卡二卡| 久久久久久97三级| 亚洲视频精品| 亚洲啪啪91| 一区二区亚洲精品| 国产精品私人影院| 欧美日韩国产不卡在线看| 久久一区二区三区超碰国产精品| 亚洲淫性视频| 日韩视频三区| 亚洲高清免费| 国产一区二区主播在线| 欧美色123| 蜜臀av性久久久久蜜臀aⅴ四虎| 午夜久久久久久| 在线视频亚洲| 亚洲精品乱码久久久久久按摩观| 国内成人精品2018免费看 | 在线视频亚洲欧美| 亚洲片国产一区一级在线观看| 国产主播一区二区三区| 国产精品久久久久久久久动漫| 欧美精品精品一区| 免费av成人在线| 久久麻豆一区二区| 欧美影片第一页| 亚洲欧美激情四射在线日 | 欧美色图麻豆| 欧美日本韩国一区二区三区| 美女精品在线| 久久欧美中文字幕| 欧美在线日韩精品| 销魂美女一区二区三区视频在线| 亚洲视频www| 99视频精品免费观看| 亚洲人体偷拍| 亚洲人精品午夜| 亚洲国产日本| 亚洲国产另类精品专区| 亚洲第一福利视频| 在线免费高清一区二区三区| 黄色在线成人| 在线日韩精品视频| 亚洲风情亚aⅴ在线发布| 伊人色综合久久天天| 尤物在线观看一区| 影音先锋国产精品| 在线观看av一区| 亚洲福利视频专区| 亚洲激情网站免费观看| 亚洲国产一区二区三区在线播| 亚洲国产一区二区三区青草影视| 亚洲国产毛片完整版| 亚洲经典三级| 日韩视频免费观看|