試判斷乙個訊息佇列是否可能死鎖。

2021-09-23 20:21:14 字數 1352 閱讀 7933

訊息佇列的緩衝區長度為l單位,讀操作為每次從緩衝區讀取r單位,寫操作為每次寫入緩衝區w單位。

訊息佇列會持續進行讀寫操作。具體為寫操作會在緩衝區還剩餘大於等於w單位空間時保持進行,當緩衝區內空間小於w時,寫操作停止,等待讀操作進行;類似的,讀操作會在緩衝區可讀內容大於等於r時保持進行,當可讀內容小於r時,讀操作停止,等待寫操作進行。讀寫都是原子操作。

若讀寫操作均無法進行,定義此時狀態為死鎖。

給定l,r,w,問訊息佇列是否可能進入死鎖狀態,若能,輸出yes,否則輸出no

輸入描述:

第1行輸入n(n<=10)表示資料組數。

從第2行到第n+1行,每行三個整數l,r,w。

輸出描述:

輸出n行,每行輸出'yes'或'no'

輸入例子1:

25 2 3

5 3 4

輸出例子1:

noyes

昨天做搜狗筆試題發現的題目,自己目前來說沒有發現任何規律,所以只能用最笨的方法做。如果能一直寫讀下去,則判為不會出現死鎖,否則就會。由於python的最大遞迴次數判為1000,這裡10次就夠了。所以只能通過這一性讓那個遞迴停止。不知道小夥伴有沒有更好的方法。以下是我的方法。

import sys

stack=

count = 0

def islock(l,w,r,stack,count):

count += 1

if count == 10:

return true

while l-len(stack)>=w:

for i in range(0,w):

while len(stack)>=r and len(stack)>0:

for i in range(0,r):

stack.pop()

while l-len(stack)return false

return true and islock(l,w,r,stack,count)

if __name__ == "__main__":

data=

while true:

line = sys.stdin.readline().strip()

if not line:

break

tmp = list(map(int, line.split(" ")))

i=1while iif islock(data[i][0],data[i][2],data[i][1],stack,count)==true:

print('no')

else:

print('yes')

i=i+1

如何設計乙個訊息佇列

其實聊到這個問題,一般面試官要考察兩塊 你有沒有對某乙個訊息佇列做過較為深入的原理的了解,或者從整體了解把握住乙個訊息佇列的架構原理。看看你的設計能力,給你乙個常見的系統,就是訊息佇列系統,看看你能不能從全域性把握一下整體架構設計,給出一些關鍵點出來。說實話,問類似問題的時候,大部分人基本都會蒙,因...

判斷乙個程序是否開啟

標頭檔案 include pragma comment lib,psapi.lib findprocess 找到自己檔名 char szname x.exe dword aprocesses 1024 cbneeded,dwprocesses char szprocessname max path ...

判斷乙個樹是否對稱

使用遞迴的方法判斷樹是否對稱,也讓我更進一步的理解了遞迴。class solution object def ismirror self,left,right if left none and right none 如果左右子樹都為空,則對稱 return true elif left none o...