linux多執行緒 生產者消費者問題

2021-06-25 21:16:03 字數 1200 閱讀 1575

#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...