現在用佇列來實現一次這個生產者和消費者模型,程式的主要思想如下圖。
乙個全域性的佇列,乙個鎖,乙個訊號量,collectimages和sendimages執行緒訪問這個佇列的時候都加鎖。
全部原始碼
//
// created by honkee on 5/17/16.
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
void* collectimages(void*);
void* sendimages(void*);
void err_exit(int, string);
pthread_mutex_t queuemutex = pthread_mutex_initializer;
pthread_cond_t queuecond = pthread_cond_initializer;
bool flag = false;
//struct thread_var ;
pthread_t* sendthread;
pthread_t* collectthread;
int collectthreadcnt = 1;
int sendthreadcnt = 4;
queue
q;int main()
}for(int i = 0; i < sendthreadcnt; ++i)
}while(1)
return0;}
void* collectimages(void* arg)
if(cond)
}}void* sendimages(void* arg)
flag = false;
string str = q.front();
q.pop();
cout
<< "thread: "
<< pid << " queue size: "
<< q.size() << " send finish: "
<< str << endl <5);
if(cond)
}}void err_exit(int err, string str)
多執行緒 生產者消費者
這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...
java多執行緒生產者 消費者模式
1 生產者僅僅在倉儲未滿時候生產,倉滿則停止生產。2 消費者僅僅在倉儲有產品時候才能消費,倉空則等待。3 當消費者發現倉儲沒產品可消費時候會通知生產者生產。4 生產者在生產出可消費產品時候,應該通知等待的消費者去消費 使用object的wait notify 方法 1.wait 當快取區已滿 已空時...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...