性欧美精品高清_欧美尤物美女在线_国产精品久久久久无码av_日韩在线视频中文字幕

首頁 常見問題 正文
聚名企服

信號量和互斥量的區別是什么?

轉載 chaicp 2021-11-17 17:43:32 5727
本教程操作環境:windows7系統、Dell G3電腦。互斥量和信號量的區別1. 互斥量用于線程的互斥,信號量用于線程的同步。這是互斥量和信號量的根本區別

本教程操作環境:windows7系統、Dell G3電腦。

互斥量和信號量的區別

1. 互斥量用于線程的互斥,信號量用于線程的同步。

這是互斥量和信號量的根本區別,也就是互斥和同步之間的區別。

互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。

同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源

2. 互斥量值只能為0/1,信號量值可以為非負整數。

也就是說,一個互斥量只能用于一個資源的互斥訪問,它不能實現多個資源的多線程互斥問題。信號量可以實現多個同類資源的多線程互斥和同步。當信號量為單值信號量是,也可以完成一個資源的互斥訪問。

3. 互斥量的加鎖和解鎖必須由同一線程分別對應使用,信號量可以由一個線程釋放,另一個線程得到。

互斥量(Mutex)

互斥量表現互斥現象的數據結構,也被當作二元信號燈。一個互斥基本上是一個多任務敏感的二元信號,它能用作同步多任務的行為,它常用作保護從中斷來的臨界段代碼并且在共享同步使用的資源。

 

Mutex本質上說就是一把鎖,提供對資源的獨占訪問,所以Mutex主要的作用是用于互斥。Mutex對象的值,只有0和1兩個值。這兩個值也分別代表了Mutex的兩種狀態。值為0, 表示鎖定狀態,當前對象被鎖定,用戶進程/線程如果試圖Lock臨界資源,則進入排隊等待;值為1,表示空閑狀態,當前對象為空閑,用戶進程/線程可以Lock臨界資源,之后Mutex值減1變為0。

Mutex可以被抽象為四個操作:

- 創建 Create

- 加鎖 Lock

- 解鎖 Unlock

- 銷毀 Destroy

Mutex被創建時可以有初始值,表示Mutex被創建后,是鎖定狀態還是空閑狀態。在同一個線程中,為了防止死鎖,系統不允許連續兩次對Mutex加鎖(系統一般會在第二次調用立刻返回)。也就是說,加鎖和解鎖這兩個對應的操作,需要在同一個線程中完成。

不同操作系統中提供的Mutex函數:

動作/系統

Win32

Linyx

Solaris

創建

CreateMutex

pthread_mutex_init

mutex_init

加鎖

WaitForSingleObject

pthread_mutex_lock

mutex_lock

解鎖

ReleaseMutex

pthread_mutex_unlock

mutex_unlock

銷毀

CloseHandle

pthread_mutex_destroy

mutex_destroy

死鎖主要發生在有多個依賴鎖存在時, 會在一個線程試圖以與另一個線程相反順序鎖住互斥量時發生. 如何避免死鎖是使用互斥量應該格外注意的東西。

  總體來講, 有幾個不成文的基本原則:

  對共享資源操作前一定要獲得鎖。

  完成操作以后一定要釋放鎖。

  盡量短時間地占用鎖。

  如果有多鎖, 如獲得順序是ABC連環扣, 釋放順序也應該是ABC。

  線程錯誤返回時應該釋放它所獲得的鎖。

也許還有讀者好奇,“掛起等待”和“喚醒等待線程”的操作如何實現?每個Mutex有一個等待隊列,一個線程要在Mutex上掛起等待,首先在把自己加入等待隊列中,然后置線程狀態為睡眠,然后調用調度器函數切換到別的線程。一個線程要喚醒等待隊列中的其它線程,只需從等待隊列中取出一項,把它的狀態從睡眠改為就緒,加入就緒隊列,那么下次調度器函數執行時就有可能切換到被喚醒的線程。

一般情況下,如果同一個線程先后兩次調用lock,在第二次調用時,由于鎖已經被占用,該線程會掛起等待別的線程釋放鎖,然而鎖正是被自己占用著的,該線程又被掛起而沒有機會釋放鎖,因此就永遠處于掛起等待狀態了,這叫做死鎖(Deadlock)。另一種典型的死鎖情形是這樣:線程A獲得了鎖1,線程B獲得了鎖2,這時線程A調用lock試圖獲得鎖2,結果是需要掛起等待線程B釋放鎖2,而這時線程B也調用lock試圖獲得鎖1,結果是需要掛起等待線程A釋放鎖1,于是線程A和B都永遠處于掛起狀態了。不難想象,如果涉及到更多的線程和更多的鎖,有沒有可能死鎖的問題將會變得復雜和難以判斷。

信號量

信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施, 它負責協調各個線程, 以保證它們能夠正確、合理的使用公共資源。

信號量可以分為幾類:

二進制信號量(binary semaphore):只允許信號量取0或1值,其同時只能被一個線程獲取。

整型信號量(integer semaphore):信號量取值是整數,它可以被多個線程同時獲得,直到信號量的值變為0。

記錄型信號量(record semaphore):每個信號量s除一個整數值value(計數)外,還有一個等待隊列List,其中是阻塞在該信號量的各個線程的標識。當信號量被釋放一個,值被加一后,系統自動從等待隊列中喚醒一個等待中的線程,讓其獲得信號量,同時信號量再減一。

信號量通過一個計數器控制對共享資源的訪問,信號量的值是一個非負整數,所有通過它的線程都會將該整數減一。如果計數器大于0,則訪問被允許,計數器減1;如果為0,則訪問被禁止,所有試圖通過它的線程都將處于等待狀態。

計數器計算的結果是允許訪問共享資源的通行證。因此,為了訪問共享資源,線程必須從信號量得到通行證, 如果該信號量的計數大于0,則此線程獲得一個通行證,這將導致信號量的計數遞減,否則,此線程將阻塞直到獲得一個通行證為止。當此線程不再需要訪問共享資源時,它釋放該通行證,這導致信號量的計數遞增,如果另一個線程等待通行證,則那個線程將在那時獲得通行證。

Semaphore可以被抽象為五個操作:

- 創建 Create

- 等待 Wait:

線程等待信號量,如果值大于0,則獲得,值減一;如果只等于0,則一直線程進入睡眠狀態,知道信號量值大于0或者超時。

-釋放 Post

執行釋放信號量,則值加一;如果此時有正在等待的線程,則喚醒該線程。

-試圖等待 TryWait

如果調用TryWait,線程并不真正的去獲得信號量,還是檢查信號量是否能夠被獲得,如果信號量值大于0,則TryWait返回成功;否則返回失敗。

-銷毀 Destroy

信號量,是可以用來保護兩個或多個關鍵代碼段,這些關鍵代碼段不能并發調用。在進入一個關鍵代碼段之前,線程必須獲取一個信號量。如果關鍵代碼段中沒有任何線程,那么線程會立即進入該框圖中的那個部分。一旦該關鍵代碼段完成了,那么該線程必須釋放信號量。其它想進入該關鍵代碼段的線程必須等待直到第一個線程釋放信號量。為了完成這個過程,需要創建一個信號量,然后將Acquire Semaphore VI以及Release Semaphore VI分別放置在每個關鍵代碼段的首末端。確認這些信號量VI引用的是初始創建的信號量。

動作/系統

Win32

POSIX

創建

CreateSemaphore

sem_init

等待

WaitForSingleObject

sem _wait

釋放

ReleaseMutex

sem _post

試圖等待

WaitForSingleObject

sem _trywait

銷毀

CloseHandle

sem_destroy

聲明:本文轉載于:互聯網,如有侵犯,請聯系service@Juming.com刪除
相關標簽: 信號量和互斥量

編輯推薦

  • 域名注冊專題合集 域名注冊專題合集

  • 域名搶注專題合集 域名搶注專題合集

  • 企業建站專題合集 企業建站專題合集

性欧美精品高清_欧美尤物美女在线_国产精品久久久久无码av_日韩在线视频中文字幕
中文字幕日韩欧美一区二区三区| 中文字幕中文字幕一区| 欧美性猛片xxxx免费看久爱| 成人午夜伦理影院| 亚洲欧洲av一区二区三区久久| 激情五月婷婷综合| 日韩欧美在线网站| 国产精品色婷婷| 亚洲专区一二三| 日韩欧美美女一区二区三区| 青草av.久久免费一区| 日韩欧美亚洲另类制服综合在线| 亚洲午夜精品网| 欧美午夜精品久久久久久超碰| 亚洲成人一区二区在线观看| 久久综合九色综合97婷婷女人| 国产一区二区三区综合| 国产成人在线视频网站| 欧美高清在线一区二区| 欧美日韩黄色一区二区| 亚洲成人免费av| 精品国产91洋老外米糕| 大胆亚洲人体视频| 一区二区国产视频| 欧美日韩高清一区二区| 一区二区高清在线| 日韩久久久精品| 国产一区二区三区综合| 亚洲国产精品av| 欧美性videosxxxxx| 国模一区二区三区白浆| 亚洲精品视频在线观看网站| 欧美日韩高清一区| 国产成人亚洲精品青草天美| 亚洲欧美日韩在线播放| 日韩精品综合一本久道在线视频| 国产成人免费9x9x人网站视频| 一区二区中文字幕在线| 精品对白一区国产伦| 91视频精品在这里| 美女网站一区二区| 中文字幕亚洲一区二区va在线| 欧美一区二区三区四区久久| 成人美女视频在线观看18| 午夜一区二区三区视频| 久久久久久一级片| 欧美精品v日韩精品v韩国精品v| 国产成人免费xxxxxxxx| 午夜精品一区二区三区电影天堂| va亚洲va日韩不卡在线观看| 国产寡妇亲子伦一区二区| 五月婷婷久久丁香| 18欧美乱大交hd1984| 精品国产伦一区二区三区观看方式| 欧美日韩aaaaa| 日本韩国精品一区二区在线观看| 韩国午夜理伦三级不卡影院| 日韩福利电影在线| 久久五月婷婷丁香社区| 精品国产一区二区三区四区四 | 丝袜亚洲另类欧美| 《视频一区视频二区| 精品欧美一区二区在线观看| 欧美日韩小视频| 成人av资源网站| 97久久精品人人做人人爽50路| 国产大陆亚洲精品国产| 精品一区二区三区视频| 中文字幕不卡在线观看| 精品国产一区二区三区不卡| 成人午夜碰碰视频| 韩国三级在线一区| 国产成人综合视频| 粉嫩绯色av一区二区在线观看| 国产精品麻豆一区二区| 中文欧美字幕免费| 亚洲一区在线电影| 中文字幕在线一区| 丁香激情综合国产| 成人免费视频一区| 成人精品一区二区三区中文字幕| 丁香婷婷综合激情五月色| 成人免费看的视频| 99视频在线观看一区三区| 99久久精品费精品国产一区二区| 成人在线视频一区| 三级成人在线视频| 免费成人av在线播放| 久久er99精品| 久久电影网电视剧免费观看| 激情五月激情综合网| 亚洲成av人在线观看| 国产不卡一区视频| 91久久精品国产91性色tv | 精品成人一区二区| 欧美日韩的一区二区| 亚洲国产成人私人影院tom| 亚洲视频一区在线| 欧美亚洲一区三区| 麻豆精品在线视频| 色婷婷亚洲综合| 亚洲精品一区在线观看| 亚洲欧美一区二区三区极速播放 | 天天综合天天综合色| 国产精品99久久久| 欧美精三区欧美精三区| 综合久久久久久久| 经典一区二区三区| 欧美日韩精品一区二区天天拍小说 | 久久精品国产亚洲高清剧情介绍| 一道本成人在线| 欧美国产欧美亚州国产日韩mv天天看完整 | 久久久国产综合精品女国产盗摄| 亚洲成人自拍一区| 99免费精品视频| 国产欧美日韩视频在线观看| 美女一区二区在线观看| 欧美浪妇xxxx高跟鞋交| 亚洲一二三区不卡| 色哟哟精品一区| 亚洲日本免费电影| 99久久综合狠狠综合久久| 国产亚洲1区2区3区| 国产精品一区二区久久不卡| 26uuu亚洲综合色欧美| 美美哒免费高清在线观看视频一区二区 | 日韩精品欧美成人高清一区二区| 91小视频在线观看| 中文字幕不卡三区| 国产激情一区二区三区桃花岛亚洲| 国产精品国产三级国产普通话99 | 亚洲精品一卡二卡| 99久久婷婷国产精品综合| 国产欧美精品一区二区三区四区 | 日日嗨av一区二区三区四区| 欧美日韩精品一区二区三区四区 | 91在线观看免费视频| 国产精品天天看| 不卡影院免费观看| 亚洲私人黄色宅男| 欧美日韩综合一区| 日韩av网站免费在线| 日韩欧美电影一二三| 国产乱人伦精品一区二区在线观看| 亚洲精品一区在线观看| 国产成人自拍网| 亚洲人被黑人高潮完整版| 日本道在线观看一区二区| 视频在线观看91| 精品噜噜噜噜久久久久久久久试看| 精品亚洲国内自在自线福利| 欧美国产日韩在线观看| 欧美性色黄大片手机版| 麻豆国产91在线播放| 中文字幕中文字幕在线一区| 欧美日韩精品二区第二页| 精彩视频一区二区| 亚洲精品日日夜夜| 精品国产91久久久久久久妲己| 99视频超级精品| 美洲天堂一区二卡三卡四卡视频| 中文字幕免费不卡| 欧美自拍偷拍一区| 久久99精品国产91久久来源| 专区另类欧美日韩| 51精品秘密在线观看| 国产不卡免费视频| 日韩中文字幕不卡| 中文字幕中文乱码欧美一区二区 | 欧美精品aⅴ在线视频| 国产乱理伦片在线观看夜一区| 亚洲激情欧美激情| 久久久综合视频| 欧美日韩成人一区二区| 成人午夜免费av| 精品一区二区三区香蕉蜜桃 | 亚洲激情图片小说视频| 久久综合精品国产一区二区三区| 在线精品视频免费观看| 国产很黄免费观看久久| 青椒成人免费视频| 亚洲国产一区视频| 日本v片在线高清不卡在线观看| 国产精品传媒视频| 国产亚洲成年网址在线观看| 3751色影院一区二区三区| 色综合天天综合网国产成人综合天| 精品一区二区三区久久久| 日本三级亚洲精品| 亚洲国产va精品久久久不卡综合 | 国产欧美日韩精品一区| 欧美精品自拍偷拍| 在线亚洲高清视频| 91麻豆免费看片| 99视频有精品| www.欧美.com| 91在线看国产| 色婷婷精品久久二区二区蜜臂av | 成人18精品视频| 成人一二三区视频|