#include#include#define buffer_size 8
struct prodcons ;
/*初始化緩衝區結構*/
void init(struct prodcons * b)
/*將產品放入緩衝區,這裡是存入乙個整數*/
void put(struct prodcons* b,int data)
/*寫資料,並移動指標*/
b->buffer[b->writepos]=data;
b->writepos++;
if(b->writepos>= buffer_size)b->writepos=0;
/*設定緩衝區非空的條件變數*/
pthread_cond_signal(&b->notempty);
pthread_mutex_unlock(&b->lock);
}/*從緩衝區中取出整數*/
int get(struct prodcons *b)
/*讀資料,移動讀指標*/
data=b->buffer[b->readpos];
b->readpos++;
if(b->readpos>=buffer_size)b->readpos=0;
/*設定緩衝區未滿的條件變數*/
pthread_cond_signal(&b->notfull);
pthread_mutex_unlock(&b->lock);
return data;
}#define over (-1)
struct prodcons buffer;
void * producer(void *data)
put(&buffer,over);
return null;
}void * consumer(void * data)
return null;
}int main(void)
上面的例子中,生產者負責將1到1000的整數寫入緩衝區,而消費者負責從同乙個緩衝區中讀取寫入的整數並列印出來。因為生產者和消費者是兩個同時執行的執行緒,並且要使用同乙個緩衝區進行資料交換,因此必須利用一種機制進行同步。通過上面的例子我們可以看到,多執行緒的最大好處是,除堆疊之外,幾乎所有的資料均是共享的,因此執行緒間的通訊效率很高;缺點:因為共享所有資料,從而非常容易導致執行緒之間互相破壞資料,這一點在程式設計時必須注意。
Linux多執行緒 生產者消費者
生產者消費者問題 這是乙個非常經典的多執行緒題目,題目大意如下 有乙個生產者在生產產品,這些產品將提供給若干個消費者去消費,為了使生產者和消費者能併發執行,在兩者之間設定乙個有多個緩衝區的緩衝池,生產者將它生產的產品放入乙個緩衝區中,消費者可以從緩衝區中取走產品進行消費,所有生產者和消費者都是非同步...
多執行緒 生產者消費者
這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...
linux多執行緒實現生產者消費者
1.初始化 條件變數採用的資料型別是pthread cond t,在使用之前必須要進行初始化,這包括兩種方式 include include include 條件變數生產者和消費者 pthread cond t condc,condp pthread mutex t the mutex unsign...