有兩類程序 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 同時訪問,否則會導致多個等待,後者不能喚醒。使用mutexa
對cnta
的使用做管理。這樣每個時刻最多會有乙個 a 在等待mutext
,後來的 a 在等待mutexa
。
兩個生產程序 a 和 b,產出產品數量不能有太大的差距:−m
≤|a−
b|≤n
解決時,看作: a≤
b+nb
≤a+m
semaphore sa = n; //
semaphore sb = m; //
a()}
b()}
sa
和sb
分別表示 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...