前言:執行緒(二)主要學習了執行緒安全管理,同步與互斥的作用,明白了互斥鎖和等待佇列的使用場景和方法,這篇部落格主要闡述其發生場景,生產者與消費者模型。
模型如下:
模型優點:
1.支援忙閒不均
2.支援併發
3.解耦合(讓兩個模組產生更小的關聯性)
模型關係分析:
生產者與生產者應該具備互斥關係
消費者與消費者應該具備互斥關係
生產者與消費者應該具備同步+互斥關係(同步:我放了資料你才能取,互斥:我放完了你才能取)
總結:乙個場所,兩類角色,三種關係
**實現:
1.使用c++封裝實現乙個執行緒安全的佇列
blockingqueue
在多執行緒程式設計中阻塞佇列(blocking queue)是一種常用於實現生產者和消費者模型的資料結構。其與普通的佇列區
別在於,當隊列為空時,從佇列獲取元素的操作將會被阻塞,直到佇列中被放入了元素;當佇列滿時,往佇列裡存
放元素的操作也會被阻塞,直到有元素被從佇列中取出(以上的操作都是基於不同的執行緒來說的,執行緒在對阻塞佇列程序操作時會被阻塞)
**如下:
#include
#include
#include
#include
#define num 8
class blockqueue
void
unlockqueue()
void
productwait()
void
consumewait()
void
notifyproduct()
void
notifyconsume()
bool isempty()
bool isfull()
public:
blockqueue
(int _cap = num)
:cap
(_cap)
void
pushdata
(const
int&data)
q.push
(data)
;unlockqueue()
;}void
popdata
(int
&data)
data = q.
front()
; q.
pop();
unlockqueue()
;}~blockqueue()
};void
*consumer
(void
*arg)
}void
*producter
(void
*arg)
}int
main()
「走進計算機深處」 Linux 執行緒(一)
競爭條件 多個執行流競爭執行 函式的可重入和不可重入 函式的重入 多個執行流同時進入乙個函式執行 可重入 函式重入不會造成資料二義,或者邏輯混亂 不可重入 函式重入可能造成資料二義,或者邏輯混亂 關鍵點 是否對全域性資料進行非原子安全操作 原子操作指不可被打斷 sigghld訊號 子程序退出後作業系...
「走進計算機深處」 Linux 程序(一)
什麼是程序?程序是為了提高cpu的執行效率,減少因為程式等待帶來的cpu空轉以及其他計算機硬體資源浪費而提出的。描述程序 pcb 程序資訊被放在乙個叫做程序控制塊的資料結構中,可以理解為程序屬性的集合。課本上稱之為pcb process control block linux作業系統下pcb是tas...
計算機視覺(三)
1 sigmoid函式不再適用的原因 1 在某些情況下梯度會消失,不利於反向傳播,例如,當輸如的值過大或過小時,根據函式的影象,返回的梯度都會是0,阻斷了梯度的反向傳播。2 不是以0為中心,梯度更新低效 拿sigmoid舉例,不是以零為中心,會造成其反向傳播的導數不是正就是負,假設w是乙個二維向量,...