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

2021-08-14 05:26:14 字數 1282 閱讀 7230

從上乙個小測試當中,我們會發現執行緒之間存在爭奪問題,所以在這裡用上了訊號鎖

#include #include #include #include #include #include #include #define max_size 5

struct data_structpro[max_size];

sem_t sem1,sem2;//signal

pthread_mutex_t mutex1,mutex2;

int in = 0,out = 0;

void producethread(void* arg);

void customerthread(void* arg);

int main(int argc,const char* argv)

void producethread(void* arg)

}void customerthread(void* arg)

//sem_wait(&sem2);

pthread_mutex_lock(&mutex2);

if(out%2 == 0)

else

printf("order=%2d thread_id=%5d time:%s",(int)pro[out%max_size].order,(int)pro[out%max_size].pid,ctime(&pro[out%max_size].the_time));

out++;

//sem_post(&sem1);

pthread_mutex_unlock(&mutex2);

sleep(3);

counter++;}}

剛開始寫的時候沒有加入訊號量來進行互動,得到了以下的結果

發現並不是符合我們預期的輸出,會出現資料雜亂,錯讀重複的現象,說明寫入和讀出是由cpu隨機排程的.

所以在這裡加上了sem_t  訊號量,來進行執行緒間的互相通知,消費者執行緒利用同乙個鎖互斥,不會造成混亂,同時通知生產者是否要生成資料,生產者執行緒也通過另乙個鎖互斥,不會不按順序生產,這樣的話就能夠做到生產完成之後傳送訊號,消費者進行消費.

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

package multithreading.pc 測試 生產者消費者模型 利用緩衝區解決 管程法 生產者,消費者,產品,緩衝區 public class testpc 生產者 class productor extends thread 生產 override public void run 消費...

多執行緒 生產者消費者

這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...

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

include include define buffer size 8 struct prodcons 初始化緩衝區結構 void init struct prodcons b 將產品放入緩衝區,這裡是存入乙個整數 void put struct prodcons b,int data 寫資料,並...