一道關於訊號量的題目

2022-02-10 10:26:48 字數 942 閱讀 6290

答案:a. p(s1)

b. v(s2) v(s3)

c.p(s2)

d.v(s4)

e.p(s4)

f.v(s5)

訊號量問題還可以理解, 但是理解不了這道題. 好好地對了對答案, 發現個問題, 題目裡沒有說s1是p1的訊號量, s2是p2的訊號量.

題目用了大量的p1,s1, a,b,c,d , 選項又是abcd,

所以題目就是為了讓大家出錯.

如果程式寫成這樣, 會被打s.

一旦發現了s1和p1的關係, 不在數字1上這個關鍵點, 就好辦了. 建議做題的時候, 使用程序1, 程序2來代替p1,p2... 這道題答不對, 我覺得就是亂在文字上.

程序1 結束, 要發訊號給 程序2. 題目裡用了 v(s1), 也就是訊號1的v操作.

那麼程序2執行之前, 應該收到訊號, 去做-1操作,及p操作. 那麼就是p(s1). 訊號量就是程序1結束時的訊號量.

程序2結束之後, 要給程序3和程序4發型號, 那麼用兩個變數s2,s3, 做+1 v操作. 通知程序3和程序4,

到底是程序3使用s2, 還是s3, 還是程序4使用s3,s2,  看下文, 程序4執行的時候,做了s3的減操作,意思是程序4收到了s3, 而s3是程序2結束後發出的, 所以程序2-->程序4 這條線用了s3

所以程序2->程序3 使用了s2.   所以

到了程序3開始, 就要做s2的減操作, 就是p(s2).

程序3結束, 應該給程序4再發乙個訊號, 那麼排下來, 就是s4咯. 所以d就是 v(s4).

程序4執行有兩個訊號, p(s3)給了, 剛才程序3結束又來了乙個s4, 那麼 e 填p(s4)

程序4結束後, 通知程序5, 再給乙個變數s5, 通知一下, 就是v(s5).

關於訊號量

1 訊號量的定義 struct semaphore 在linux中,訊號量用上述結構體表示,我們可以通過該結構體定義乙個訊號量。2 訊號量的初始化 可用void sema init struct semaphore sem,int val 直接建立,其中val為訊號量初值。也可以用兩個巨集來定義和初...

一道關於訊號的題

用fork建立兩個子程序,呼叫signal 讓父程序接收鍵盤上的中斷訊號 control c 捕捉到訊號後父程序用kill 向子程序傳送自定義訊號,子程序捕捉到訊號後分別輸出如下資訊後終止 child process 1 is killed by parent child process 2 is ...

360一道關於this的題目

原題目是這樣子的 window.val 1 var obj 說出下面的輸出結果 obj.dbl var func obj.dbl func this呢其實就是這樣,分清楚呼叫就好了。obj中的沒有指定呼叫。預設從函式中查詢。如果沒有則往上一級查詢。所以 上面的式子可以寫成這樣 window.val ...