生產者消費者模式就是通過乙個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊,而
通過阻塞佇列來進行通訊,所以生產者生產完資料之後不用等待消費者處理,直接扔給阻塞佇列,消費者不找生產者
要資料,而是直接從阻塞佇列裡取,阻塞佇列就相當於乙個緩衝區,平衡了生產者和消費者的處理能力。這個阻塞隊
列就是用來給生產者和消費者解耦的
/**
* 實現阻塞式佇列:
* 1.滿足執行緒安全的生產,消費的功能
* 2.生產消費達到上限下限時,需要阻塞等待
*/public
class
myblockingqueue
public
synchronized
void
put(e e)
throws interruptedexception
putindex =
(putindex+1)
%items.length;
// 存放元素的索引,需要滿足迴圈佇列索引》陣列長度的情況
items[putindex]
= e;
//存放元素
size++
;notifyall()
;}來判斷,不要使用if
public
synchronized e take()
throws interruptedexception
takeindex =
(takeindex +1)
%items.length;
size--
;notifyall()
;return
(e)items[takeindex];}
public
static
void
main
(string[
] args)
throws interruptedexception
}catch
(interruptedexception e)}}
).start()
;}while
(true)}
}
阻塞式 非阻塞式IO
知識點 非阻塞式io 的兩種設定方法 1 函式fcntl 設定 o nonblock 選項 int flag fcntl sockfd,f getfl,0 檢查檔案標誌位 fcntl sockfd,f setfl,flag o nonblock 設定檔案標誌位 2 函式ioctl 設定fionbio...
等待佇列 阻塞非阻塞
阻塞 裝置驅動不阻塞,使用者想獲取裝置資源只能不停的查詢,這無謂的消耗cpu資源。而阻塞訪問,不能獲取資源的程序將進入休眠,它將cpu資源 禮讓 給其他程序 喚醒程序的地方最大可能發生在中斷裡面,因為硬體資源獲得的同時往往伴隨著乙個中斷 定義頭 wait queue head t queue 初始化...
阻塞式Socket VS 非阻塞式Socket
主要有三種型別的socket,永久阻塞模式 阻塞加超時模式和非阻塞式。socket模式可以通過apr socket opt set 和apr socket timeout set 這兩個api控制。在windows和unix系統上預設的socket是永久阻塞模式 apr so nonblock ti...