caffe的datareader類中
class queuepair ;
這個就是雙阻塞佇列,先將free佇列用空資料填充到最大長度,然後按照如下規則:
1,每當生產者push時,先將free佇列pop,如果free為空,不可pop,那麼表明full佇列已滿,資料已經飽和,則不可push,如果free佇列可以pop,那麼執行pop,填充進入實際資料,並對full佇列push該資料。
2,每當消費者pop時,先將full佇列pop,如果可以pop,則進行pop並消費,然後填充乙個空資料push到free佇列,如果full佇列不可pop為空,則消費者不可pop,表明free佇列已滿,全為空資料。
3,核心思想是讓full和free佇列實際元素數量之和恆定為最大佇列長度不變,通過判斷free佇列是否為空來判斷full佇列是否為滿,避免直接對full佇列判斷是否滿。
4,主要是我們可能不知道佇列最大長度時,無法判斷是否滿時採用這種方法。
同步容器 併發容器 阻塞佇列 雙端佇列
一 同步容器 主要代表有vector和hashtable,以及collections.synchronized 等。鎖的粒度為當前物件整體。迭代器是及時失敗的,即在迭代的過程中發現被修改,就會丟擲concurrentmodificationexception。二 併發容器 主要代表有concurre...
caffe讀取多標籤的lmdb資料
問題描述 lmdb檔案支援資料 標籤的形式,但是卻只能寫入乙個標籤,引入多標籤的解決方法有很多,這兒詳細說一下我的辦法 製作多個data資料,分別加入乙個標籤。我的方法只適用於標籤數量較少的情況,標籤數量比較多的話建議修改原始碼支援。下面介紹詳細步驟。以下均以兩個標籤作為介紹。生成兩個含單標籤的li...
可阻塞的佇列
l 什麼是可阻塞佇列,阻塞佇列的作用與實際應用,阻塞佇列的實現原理。l 阻塞佇列與 semaphore 有些相似,但也不同,阻塞佇列是一方存放資料,另一方釋放資料,semaphore 通常則是由同一方設定和釋放訊號量。l arrayblockingqueue 只有put方法和 take 方法才具有阻...