#include
#include
#include
#include
using namespace std;
#define max_queue 10
class blockqueue
~blockqueue()
//析構函式中將乙個鎖和兩個條件變數(生產者條件變數,消費者條件變數)銷毀
bool blockqueuepush
(int data)
將此函式所傳形參data,推進佇列中儲存,傳值即可(注意函式返回型別是bool)
_queue.
push
(data)
;//將data放入到阻塞佇列中
//pthread_cond_signal(&con_cond);//也可以在這裡給消費者傳送訊號,這樣的話佇列放不滿,也不會觸發條件變數的阻塞等待
pthread_mutex_unlock
(&mutex)
;//操作完佇列解鎖
} bool blockqueuepop
(int
& data)
data = _queue.
front()
;//將阻塞佇列隊頭元素給data賦值
_queue.
pop();
//賦值後刪除隊頭元素
//pthread_cond_signal(&pro_cond);//也可以在這裡給消費者傳送訊號,這樣的話佇列放不滿,也不會觸發條件變數的阻塞等待
pthread_mutex_unlock
(&mutex)
;//操作完佇列解鎖
}private:
queue<
int> _queue;
//借助阻塞佇列(乙個場所)來實現生產者消費者模型
int _capacity;
//限制阻塞佇列的最大容量
pthread_mutex_t mutex;
//乙個鎖保護共享區和條件等待(執行緒安全 是通過 互斥+同步 來實現)
pthread_cond_t pro_cond;
//生產者等待在生產者的條件等待(佇列)上,所以生產者有生產者的條件變數
pthread_cond_t con_cond;
//消費者等待在消費者的條件等待(佇列)上,所以消費者有消費者的條件變數};
void
*pro_thread
(void
* arg)
return
null;}
void
*con_thread
(void
* arg)
return
null;}
/*int main()
if(ret = pthread_create(&con_tid,null,con_thread,(void*)&q) != 0)//建立消費者執行緒
//執行緒等待
pthread_join(pro_tid,null);//執行緒等待:等待生產者執行緒退出並釋放記憶體
pthread_join(con_tid,null);//執行緒等待:等待消費者執行緒退出並釋放記憶體
return 0;}*/
intmain()
}for
(i =
0; i <4;
++i)
}for
(i =
0; i <4;
++i)
for(i =
0; i <4;
++i)
return0;
}
建立單生產者和單消費者的結果:建立多執行緒的結果:
執行緒,生產者消費者模型
什麼是執行緒 1.執行緒是cpu最小的執行單位 2.程序是資源單位 3.如果將作業系統比作工廠的話,程序是車間,執行緒是流水線,而cpu為電源 開啟乙個程序預設有乙個執行緒即主線程 執行緒的兩種開啟方式 例項化thread類 自定義mythread類,繼承thread類,覆蓋run方法 什麼時候需要...
Linux 生產者消費者模型
生產者消費者模型 為什麼要使用生產者消費者模型?生產者消費者模型遵循 基於生產者消費者模型的阻塞佇列 include include include include include include using namespace std class blockqueue void unlockque...
生產者與消費者模型(執行緒)
include include include include include include define queue size 100 define ok 0 define error 1 typedef int datatype typedef struct seqqueue struct m...