日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多线程面试题系列(12):多线程同步内功心法——PV操作上

發(fā)布時(shí)間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程面试题系列(12):多线程同步内功心法——PV操作上 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上面的文章講解了在Windows系統(tǒng)下實(shí)現(xiàn)多線程同步互斥的方法,為了提高在實(shí)際問題中分析和思考多個(gè)線程之間同步互斥問題的能力,接下來將講解PV操作,這也是操作系統(tǒng)中的重點(diǎn)和難點(diǎn)。本文將會(huì)先簡(jiǎn)要介紹下PV操作的來源和基本使用方法,然后再通過兩道經(jīng)典的計(jì)算機(jī)考研真題——放水果和安全島來示范如何運(yùn)用PV操作。

?

先講講PV操作的起源和用法。

1962年,荷蘭學(xué)者Dijksrta在參與X8計(jì)算機(jī)的開發(fā)中設(shè)計(jì)并實(shí)現(xiàn)了具有多道程序運(yùn)行能力的操作系統(tǒng)——THE Multiprogramming System。為了解決這個(gè)操作系統(tǒng)中進(jìn)程(線程)的同步與互斥問題,他巧妙地利用火車運(yùn)行控制系統(tǒng)中的“信號(hào)燈”(semaphore,或叫“信號(hào)量”)概念加以解決。信號(hào)量的值大于0時(shí),表示當(dāng)前可用資源的數(shù)量;當(dāng)它的值小于0時(shí),其絕對(duì)值表示等待使用該資源的進(jìn)程個(gè)數(shù)。注意,這個(gè)信號(hào)量的值僅能由PV操作來改變。

PV操作由P操作原語和V操作原語組成(原語也叫原子操作Atomic Operation,是不可中斷的過程),對(duì)信號(hào)量(注意不要和Windows中的信號(hào)量機(jī)制相混淆)進(jìn)行操作,具體定義如下:

P(S):

①將信號(hào)量S的值減1,即S=S-1;

②如果S>=0,則該進(jìn)程繼續(xù)執(zhí)行;否則該進(jìn)程置為等待狀態(tài)。

V(S):

①將信號(hào)量S的值加1,即S=S+1;

②該進(jìn)程繼續(xù)執(zhí)行;如果該信號(hào)的等待隊(duì)列中有等待進(jìn)程就喚醒一等待進(jìn)程。

?

用PV操作實(shí)現(xiàn)多線程的同步與互斥是非常簡(jiǎn)單的,只要考慮邏輯處理上合理嚴(yán)密而不用考慮具體技術(shù)細(xì)節(jié),因此與寫偽代碼較為相似。比如有多個(gè)進(jìn)程P1、P2、 ……PN。它們要互斥的訪問一個(gè)資源。用PV操作來實(shí)現(xiàn)就非常方便直觀。下面是PV操作代碼:

設(shè)置信號(hào)量為S,初值為1。各進(jìn)程的操作流程如下:

進(jìn)程P1??????????????進(jìn)程P2?????????? ……??????????進(jìn)程Pn

P(S);????????????? P(S);????????????? ??????????? ?P(S);

訪問資源;?????????訪問資源;??????????????????????訪問資源;

V(S);???????????? V(S);??????????????????????? ??V(S);

可以看出PV操作會(huì)忽略具體的編程細(xì)節(jié),讓程序員的主要精力放在線程同步互斥的邏輯處理上。因此,通過練習(xí)PV操作能快速有效提高程序員對(duì)多線程的邏輯思維能力,達(dá)到強(qiáng)化“內(nèi)功”的目的

?

接下來就來幾道簡(jiǎn)單的計(jì)算機(jī)考研真題。

?

第一題 放水果 南京大學(xué)計(jì)算機(jī)考研真題

桌上有一空盤,允許存放一只水果。爸爸可向盤中放蘋果,也可向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規(guī)定當(dāng)盤空時(shí)一次只能放一只水果供吃者取用,請(qǐng)用P、V原語實(shí)現(xiàn)爸爸、兒子、女兒三個(gè)并發(fā)進(jìn)程的同步。

這個(gè)題目涉及的東西非常之多,光人物就有三個(gè)再加水果,盤子等等,確實(shí)讓人感覺好像無從下手。但不管題目如何變,只要牢牢的抓住同步和互斥來分析問題就必定能迎刃而解。

下面先考慮同步情況即所有“等待”情況:

第一.爸爸要等待盤子為空。

第二.兒子要等待盤中水果是桔子。

第三.女兒要等待盤中水果是蘋果。

接下來來考慮要互斥處理的資源,看起來盤子好像是要作互斥處理的,但由于題目中的爸爸、兒子、女兒均只有一個(gè),并且他們?cè)L問盤子的條件都不一樣,所以他們根本不會(huì)同時(shí)去訪問盤子,因此盤子也就不用作互斥處理了。分析至些,這個(gè)題目已經(jīng)沒有難度了,下面用PV原語給出答案:

先設(shè)置三個(gè)信號(hào)量,信號(hào)量Orange表示盤中有桔子,初值為0。信號(hào)量Apple表示盤中有蘋果,初值為0。信號(hào)量EmptyDish表示盤子為空,初值為1。三個(gè)人的操作流程如下所示:

1.爸爸

P(EmptyDish)

if (rand()%2==0)

{???

??? 放桔子

??? V(Orange)

}

else

{

??? 放蘋果

?? ?V(Apple)

}

?

2.兒子

P(Orange)

取桔子

V(EmptyDish)

?

3.女兒

P(Apple)

取蘋果

V(EmptyDish)

?

?

第二題 安全島 南開大學(xué)考研真題

在南開大學(xué)至天津大學(xué)間有一條彎曲的路,每次只允許一輛自行車通過,但中間有小的安全島M(同時(shí)允許兩輛車),可供兩輛車在已進(jìn)入兩端小車錯(cuò)車,設(shè)計(jì)算法并使用P,V實(shí)現(xiàn)。

?

這個(gè)問題應(yīng)該如何考慮了?同樣只要牢牢的抓住同步和互斥來分析問題就必定能迎刃而解。

考慮所有“等待”情況:

在路口N準(zhǔn)備從N到T的人應(yīng)該什么時(shí)候進(jìn)入了?如果他只判斷道路K上有沒有人肯定是不行的,因?yàn)槿绻踩珝uM上已經(jīng)有2個(gè)人,那么路口N和路口T再各進(jìn)一人,肯定會(huì)造成死鎖。因此可以這樣——在路口N準(zhǔn)備從N到T的人要等待與他同方向的人已經(jīng)到達(dá)T,如果此人已經(jīng)到達(dá)T,且道路K上沒有人,他必定可以上路了。同理在路口T準(zhǔn)備從T到N的人也應(yīng)該這樣做。

再考慮互斥情況:

路上每次只允許一輛自行車通過,所以道路是需要作互斥處理的。

?

分析之后,下面就用PV原語給出答案(考研輔導(dǎo)書上的答案):

設(shè)置信號(hào)量NT表示在路口N且從N到T方向上允許出發(fā)的自行車數(shù)量,初值為1。信號(hào)量TN表示在路口T且從T到N方向上允許出發(fā)的自行車數(shù)量,初值為1。信號(hào)量K和L表示道路,初值均為1。這樣從N到T的車和從T到N的車的行駛流程如下:

從N到T的車?????? ??????????????從T到N的車

P(NT)??????????????? P(TN)

P(K)???????????????? P(L)

由N到M???????????????由T到M

V(K)?????????????????V(L)

P(L)?????????????????P(K)

由M到T???????????????由M到T

V(L)?????????????????V(K)

V(NT)????????????????V(TN)

?

這個(gè)題目的解法有很多,比如還可以用信號(hào)量M來記錄安全島M上空位個(gè)數(shù),初值為2。每個(gè)進(jìn)入道路前的人都要先預(yù)訂安全島上的空位,訂到后再互斥的進(jìn)入道路。否則就要等待安全島上有空位。信號(hào)量K和L表示道路,初值均為1。然后從N到T的車和從T到N的車的行駛流程如下:

從N到T的車?????????????????????從T到N的車

P(M)???????????????? P(M)

P(K)?????????????????P(L)

由N到M???????????????由T到M

V(K)?????????????????V(L)

P(L)?????????????????P(K)

V(M)?????????????????V(M)

由M到T???????????????由M到T

V(L)?????????????????V(K)

?

這種解決方法也是不會(huì)造成死鎖的。安全島的解法非常之多,網(wǎng)上還有不少不同的解法,有興趣的童鞋可以搜索一下。

?

下一篇將講解更難的一道PV操作題,歡迎大家參閱。

轉(zhuǎn)載于:https://www.cnblogs.com/dengyungao/p/7504036.html

總結(jié)

以上是生活随笔為你收集整理的多线程面试题系列(12):多线程同步内功心法——PV操作上的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。