❶ .net 如何處理並發異常
並發和異常可不是一個概念。。最簡單的就是lock關鍵字了, 如 lock(sharedObject){sharedObject.SomeProperty = "anything";} 當第一個線程執行到 lock 時, 就會設置鎖定臨界資源, 在其執行完 lock 所管轄的代碼之前 , 其它線程要想鎖定相同的臨界資源, 就要等待。 注意, 這個鎖定只是一種君子約定, 也就是說如果其它線程不執行鎖定操作, 而直接訪問臨界資源,那是不會引起等待的。就像狗通過特殊方式劃定自己的地盤後, 其它狗就不會擅闖了, 因為這是狗類的規矩, 但貓可不管這一套。
❷ 三個並發進程,一個臨界資源,如何設互斥信號量
如果你確定是一個互斥問題的話,不管多少個進程都只需要一個互斥信號量,並且該互斥信號量的初值只需要設為1就可以了。
仔細考慮一下什麼是互斥資源?不允許多個進程同時訪問的資源才是互斥資源。
❸ 計算機操作系統關於進程的問題
選A,湯小丹的《計算機操作系統中》有提到這個。原話是「為使多個進程能互斥地訪問某 臨界資源,只需為該資源設置一互斥信號量mutex,並設其初始值為1」。簡單來所,每個想要訪問臨界資源的進程都會先執行wait(mutex),第一個執行的進程是肯定可以獲得該資源的,而此時同樣想要獲得該臨界資源的進程肯定失敗,因為wait(mutex)之後,mutex會減1,即0(0表示假),所以其他進程想要此時訪問必然失敗,從而實現互斥訪問臨界資源。
❹ 如何利用信號量機制實現多進程訪問臨界資源
進程互斥 定義:兩個或兩個以上的進程,不能同時進入關於同一組共享變數的臨界區域,否則可能發生與時間有關的錯誤,這種現象被稱作進程互斥.
在多道程序環境下,存在著臨界資源,它是指多進程存在時必須互斥訪問的資源。也就是某一時刻不允許多個進程同時訪問,只能單個進程的訪問。我們把這些程序的片段稱作臨界區或臨界段,它存在的目的是有效的防止競爭條件又能保證最大化使用共享數據。而這些並發進程必須有好的解決方案,才能防止出現以下情況:多個進程同時處於臨界區,臨界區外的進程阻塞其他的進程,有些進程在臨界區外無休止的等待。除此以外,這些方案還不能對CPU的速度和數目做出任何的假設。只有滿足了這些條件,才是一個好的解決方案。
訪問臨界資源的循環進程可以這樣來描述:
Repeat
entry section
Critical sections;
exit section
Remainder sectioni;
Until false
為實現進程互斥,可以利用軟體的方法,也可以在系統中設置專門的同步機制來協調多個進程,但是所有的同步機制應該遵循四大准則:
1.空閑讓進 當臨界資源處於空閑狀態,允許一個請求進入臨界區的進程立即進入臨界區,從 而有效的利用資源。
2.忙則等待 已經有進程進入臨界區時,意味著相應的臨界資源正在被訪問,所以其他准備進 入臨界區的進程必須等待,來保證多進程互斥。
3.有限等待 對要求訪問臨界資源的進程,應該保證該進程能在有效的時間內進入臨界區,防 止死等狀態。
4.讓權等待 當進程不能進入臨界區,應該立即釋放處理機,防止進程忙等待。
早期解決進程互斥問題有軟體的方法和硬體的方法,如:嚴格輪換法,Peterson的解決方案,TSL指令,Swap指令都可以實現進程的互斥,不過它們都有一定的缺陷,這里就不一一詳細說明,而後來Kijkstra提出的信號量機制則更好的解決了互斥問題。
❺ Java 什麼是多線程對臨界資源如何訪問
一個進程可以有多個線程,多個線程可以共享公共數據,這樣能提高運行速度。。臨界資源使用線程同步,也就是只能一個線程運行。
❻ 關於3個進程共享一個臨界資源
在操作系統理論中有一個非常重要的概念叫做P,V原語。在我們研究進程間的互斥的時候經常會引入這個概念,將P,V操作方法與加鎖的方法相比較,來解決進程間的互斥問題。實際上,他的應用范圍很廣,他不但可以解決進程管理當中的互斥問題,而且我們還可以利用此方法解決進程同步與進程通信的問題。
[一]P,V原語理論
闡述P,V原語的理論不得不提到的一個人便是赫赫有名的荷蘭科學家E.W.Dijkstra。如果你對這位科學家沒有什麼印象的話,提起解決圖論中最短路徑問題的Dijkstra演算法應當是我們再熟悉不過的了。P,V原語的概念以及P,V操作當中需要使用到的信號量的概念都是由他在1965年提出的。
信號量是最早出現的用來解決進程同步與互斥問題的機制,包括一個稱為信號量的變數及對它進行的兩個原語操作。信號量為一個整數,我們設這個信號量為:sem。很顯然,我們規定在sem大於等於零的時候代表可供並發進程使用的資源實體數,sem小於零的時候,表示正在等待使用臨界區的進程的個數。根據這個原則,在給信號量附初值的時候,我們顯然就要設初值大於零。
p操作和v操作是不可中斷的程序段,稱為原語。P,V原語中P是荷蘭語的Passeren,相當於英文的pass, V是荷蘭語的Verhoog,相當於英文中的incremnet。
P原語操作的動作是:
(1) sem減1;
(2) 若sem減1後仍大於或等於零,則進程繼續執行;
(3) 若sem減1後小於零,則該進程被阻塞後進入與該信號相對應的隊列中,然後轉進程調度。
V原語操作的動作是:
(1) sem加1;
(2) 若相加結果大於零,則進程繼續執行;
(3) 若相加結果小於或等於零,則從該信號的等待隊列中喚醒一等待進程,然後再返回原進程繼續執行或轉進程調度。
需要提醒大家一點就是P,V操作對於每一個進程來說,都只能進行一次。而且必須成對使用。且在P,V願語執行期間不允許有中斷的發生。
對於具體的實現,方法非常多,可以用硬體實現,也可以用軟體實現。我們採用如下的定義:
procere p(var s:samephore);
{
s.value=s.value-1;
if (s.value<0) asleep(s.queue);
}
procere v(var s:samephore);
{
s.value=s.value+1;
if (s.value<=0) wakeup(s.queue);
}
其中用到兩個標准過程:
asleep(s.queue);執行此操作的進程式控制制塊進入s.queue尾部,進程變成等待狀態
wakeup(s.queue);將s.queue頭進程喚醒插入就緒隊列
對於這個過程,s.value初值為1時,用來實現進程的互斥。
雖軟說信號量機制畢加鎖方法要好得多,但是也不是說它沒有任何的缺陷。由此我們也可以清晰地看到,這種信號量機制必須有公共內存,不能用於分布式操作系統,這是它最大的弱點。
[二]P,V原語的應用
正如我們在文中最開始的時候提到的,P,V原語不但可以解決進程管理當中的互斥問題,而且我們還可以利用此方法解決進程同步與進程通信的問題。
(1)用P V原語實現進程互斥
把臨界區置於P(sem) 和V(sem)之間。當一個進程想要進入臨界區時,它必須先執行P原語操作以將信號量sem減1,在進程完成對臨界區的操作後,它必須執行V原語操作以釋放它所佔用的臨界區。從而就實現了進程的互斥:
具體的過程我們可以簡單的描述如下:
PA:
P(sem)
<S>;
V(sem)
PB:
P(sem)
<S>;
V(sem)
(2) 用P V原語實現進程同步
進程同步問題的解決同樣可以採用這種操作來解決,我們假設兩個進程需要同步進行,一個進程是計算進程,另一個進程是列印進程,那麼這個時候兩個進程的定義可以表示為:
PC(表示計算進程)
A: local buf
repeat
buf=buf
until buf=空
計算
得到計算結果
buf=計算結果
goto A
PP:(表示列印進程)
B: local pri
repeat
pri=buf
until pri!=空
列印buf中的數據
清除buf中的數據
goto B
相應用P,V原語的實現過程為:
PA: deposit(data)
Begin local x
P(bufempty)
按FIFO方式選擇一個空緩沖區buf(x)
buf(x)=data
buf(x)置滿標記
V(buffull)
end
PB:remove(data)
Begin local x
P(buffull)
按FIFO方式選擇一個裝滿
數據的緩沖區buf(x)
data=buf(x)
buf(x)置空標記
V(bufempty)
end
(3)用P V原語實現進程通信
我們以郵箱通信為例說明問題:
郵箱通信滿足的條件是:
<1>;發送進程發送消息的時候,郵箱中至少要有一個空格能存放該消息。
<2>;接收進程接收消息時,郵箱中至少要有一個消息存在。
發送進程和接收進程我們可以進行如下的描述:
Deposit(m)為發送進程,接收進程是remove(m). Fromnum為發送進程的私用信號量,信箱空格數n。mesnum為接收進程的私用信號量,初值為0.
Deposit(m):
Begin local x
P(fromnum)
選擇空格x
將消息m放入空格x中
置格x的標志為滿
V(mesnum)
end
Remove(m)
Begin local x
P(mesnum)
選擇滿格x
把滿格x中的消息取出放m中
置格x標志為空
V(fromnum)
end
筆者僅從最基本的進程問題上論述P,V原語的應用。當然關於這一部分的應用是十分廣泛的。比如操作系統文化史上非常經典的哲學家就餐問題,生產-消費問題,讀者-寫者問題,理發師問題等等。大家不妨嘗試一下用信號量的方法進行實現。
❼ 使用開關中斷方法實施臨界區互斥的缺點是什麼如何克服該缺點
摘要 進入區:檢查是否可以進入臨界區,若可以則設置正在訪問臨界區的標志(加鎖),以阻止其他進程同時進入臨界區
❽ 設備控制器是臨界資源嗎
設備控制器是臨界資源嗎?設備控制器bu是臨界資源。多道程序系統中存在許多進程,它們共享各種資源,然而有很多資源一次只能供一個進程使用。一次僅允許一個進程使用的資源稱為臨界資源。許多物理設備都屬於臨界資源,如輸入機、列印機、磁帶機等。
中文名
臨界資源
硬體有
列印機、磁帶機
軟體有
消息緩沖隊列、變數
含義
採取互斥的方式,實現共享的資源
快速
導航
事例
簡介
各進程採取互斥的方式,實現共享的資源稱作臨界資源。
屬於臨界資源的硬體有列印機、磁帶機等,軟體有消息緩沖隊列、變數、數組、緩沖區等。 諸進程間應採取互斥方式,實現對這種資源的共享。
進程中用於實現進程互斥的那段代碼稱為臨界區。顯然,若能保證諸進程互斥地進入自己的臨界區,便可實現諸進程對臨界資源的互斥訪問。為此,每個進程在進入臨界區之前,應先對欲訪問的臨界資源進行檢查,看它是否正被訪問。如果此刻該臨界資源未被訪問,進程便可進入臨界區對該資源進行訪問,並設置它正被訪問的標志;如果此刻該臨界資源正被某進程訪問,則本進程不能進入臨界區。
在操作系統中,有臨界區的概念。臨界區內放的一般是被1個以上的進程或線程(以下只說進程)共用的數據。
臨界區內的數據一次只能同時被一個進程使用,當一個進程使用臨界區內的數據時,其他需要使用臨界區數據的進程進入等待狀態。
操作系統需要合理的分配臨界區以達到多進程的同步和互斥關系,如果協調不好,就容易使系統處於不安全狀態,甚至出現死鎖現象。進程的同步與互斥
進程的同步與互斥是指進程在推進時的相互制約關系。在多道程序系統中,由於資源共享與進程合作,這種進程間的制約稱為可能。為了保證進程的正確運行以及相互合作的進程之間交換信息,需要進程之間的通信。進程之間的制約關系體現為:進程的同步和互斥。
·進程同步:它主要源於進程合作,是進程間共同完成一項任務時直接發生相互作用的關系。為進程之間的直接制約關系。在多道環境下,這種進程間在執行次序上的協調是必不可少的。
·進程互斥:它主要源於資源共享,是進程之間的間接制約關系。在多道系統中,每次只允許一個進程訪問的資源稱為臨界資源,進程互斥就是保證每次只有一個進程使用臨界資源。
臨界資源和臨界區:一次只允許一個進程使用的共享資源稱為臨界資源,如列印機、公共變數等;而在並發進程中與共享變數有關的程序段稱為臨界區。對臨界區的訪問必須是互斥進行。進程進入臨界區要滿足一定的條件,以保證臨界資源的安全使用,系統的正常運行,即對臨界區的管理就遵循以下三個原則:
(1)當有若干進程要求進入它們的臨界區時,應在有限時間內使一進程進入臨界區。換句話說,它們不應該相互等待而致使誰都不能進入。
(2)每次最多有一個進程處於臨界區內。
(3)進程在臨界區內逗留應在有限時間范圍內。
❾ Linux系統中對臨界資源進行互斥訪問的手段是
自旋鎖(Spin Lock)是一種典型的對臨界資源進行互斥訪問的手段,其名稱來源於它的工作方式。為了獲得一個自旋鎖,在某CPU上運行的代碼需先執行一個原子操作,該操作測試並設置(Test-AndSet)某個內存變數。由於它是原子操作,所以在該操作完成之前其他執行單元不可能訪問這個內存變數。如果測試結果表明鎖已經空閑,則程序獲得這個自旋鎖並繼續執行;如果測試結果表明鎖仍被佔用,程序將在一個小的循環內重復這個「測試並設置」操作,即進行所謂的「自旋」,通俗地說就是「在原地打轉」。當自旋鎖的持有者通過重置該變數釋放這個自旋鎖後,某個等待的「測試並設置」操作向其調用者報告鎖已釋放。理解自旋鎖最簡單的方法是把它作為一個變數看待,該變數把一個臨界區標記為「我當前在運行,請稍等一會」或者標記為「我當前不在運行,可以被使用。如果A執行單元首先進入常式,它將持有自旋鎖;當B執行單元試圖進入同一個常式時,將獲知自旋鎖已被持有,需等到A執行單元釋放後才能進入。在ARM體系結構下,自旋鎖的實現借用了ldrex指令、strex指令、ARM處理器內存屏障指令dmb和dsb、wfe指令和sev指令,這類似於代碼清單7.1的邏輯。可以說既要保證排他性,也要處理好內存屏障。
自旋鎖主要針對SMP或單CPU但內核可搶占的情況,對於單CPU和內核不支持搶占的系統,自旋鎖退化為空操作。在單CPU和內核可搶占的系統中,自旋鎖持有期間中內核的搶占將被禁止。由於內核可搶占的單CPU系統的行為實際上很類似於SMP系統,因此,在這樣的單CPU系統中使用自旋鎖仍十分必要。另外,在多核SMP的情況下,任何一個核拿到了自旋鎖,該核上的搶占調度也暫時禁止了,但是沒有禁止另外一個核的搶占調度。盡管用了自旋鎖可以保證臨界區不受別的CPU和本CPU內的搶占進程打擾,但是得到鎖的代碼路徑在執行臨界區的時候,還可能受到中斷和底半部的影響。為了防止這種影響,就需要用到自旋鎖的衍生。
❿ 什麼是臨界資源
臨界資源是指每次僅允許一個進程訪問的資源。
屬於臨界資源的硬體有列印機、磁帶機等,軟體有消息緩沖隊列、變數、數組、緩沖區等。 諸進程間應採取互斥方式,實現對這種資源的共享。
每個進程中訪問臨界資源的那段代碼稱為臨界區。顯然,若能保證諸進程互斥地進入自己的臨界區,便可實現諸進程對臨界資源的互斥訪問。為此,每個進程在進入臨界區之前,應先對欲訪問的臨界資源進行檢查,看它是否正被訪問。如果此刻該臨界資源未被訪問,進程便可進入臨界區對該資源進行訪問,並設置它正被訪問的標志;如果此刻該臨界資源正被某進程訪問,則本進程不能進入臨界區。
請採納,謝謝