P V 的兩個問題

2021-07-09 09:22:08 字數 1044 閱讀 2498

有兩類程序 a 和 b,乙個資源 t。

兩類不能同時使用乙個資源 t。

可以有至多 n 個 a 同時使用 t,或者至多 m 個 b 同時使用 t。

semaphore cnta = 0;

semaphore cntb = 0;

semaphore mutext = 1;

semaphore mutexa = 1;

semaphore mutexb = 1;

semaphore sa = n;

semaphore sb = m;

a()b()

這個問題有生產者消費者問題的影子,也有讀者寫者問題的影子。

主要的考慮方向是,記錄 a 和 b 使用 t 的數目。對於 a,如果發現當前沒有 a 使用 t,那麼有可能是有 b 正在使用 t,也有可能是 t 沒有被使用,這個時候 a 實際上是在申請 t 這個資源。

同理當使用 t 結束,如果沒有 a 使用 t,那麼實際上是釋放了這個資源。

同時應該認識到的是,cnta不能被多個 a 同時訪問,否則會導致多個等待,後者不能喚醒。使用mutexacnta的使用做管理。這樣每個時刻最多會有乙個 a 在等待mutext,後來的 a 在等待mutexa

兩個生產程序 a 和 b,產出產品數量不能有太大的差距:−m

≤|a−

b|≤n

解決時,看作: a≤

b+nb

≤a+m

semaphore sa = n; //

semaphore sb = m; //

a()}

b()}

sasb分別表示 a 和 b 還可以生產多少個。

每個 a 產品產出都使得 b 可以多生產乙個;每個 b 產品產出都使得 a 可以多生產乙個。

這就是同步設計的基本模型。

兩個問題的對比

問題1 cf390c 給定若干行聊天記錄 發言人 話 有些聊天記錄的 發言人 是缺失的,已知相鄰對話發言人一定不同,且每個發言人說的話裡都不會包含自己的名字,現給定可能的發言人的集合,請填充每個對話的發言人.來自codeforces round 390 問題2 lc36 給定乙個9 9的矩陣,有些元...

兩個奇怪的問題

因為 中有align left class table cellspacing 1 cellpadding 4 width 800 align left 導致 相對位置十分的怪異。後面的文字不是在 後面,而是和 在水平上對齊!刪掉就好了。td font family tahoma,verdana f...

gorm time的兩個問題

第乙個問題,mysql在儲存datetime型別時,我已經用parse轉換成本地時間了依然不能儲存成本地時間,在資料庫存的還是utc時間,是因為沒有在建立連線時加上 loc local第二個問題,就是datetime型別的字段在作為查詢條件時,比較的時候報錯 sql scan error on co...