生產者與消費者c語言
① 簡單的「生產者-消費者」問題 請用c語言編寫
int mutex=1 ,Vm=10 , vn=0;int in=0;int out=0; while (1)/*生產者進程*/{ { 生產下一個產品 } P(M) P(mutex) buffer[in]=proct in=(in+1) %10 V(mutex) V(N)} while(1) //消費者進程{ P(N); p(mutex); goods=buffer[out]; out=(out+1)%10; V(mutex); V(M);}
② 誰會用C語言編寫生產者與消費者問題
呵呵 !
不知道我這樣的理解對不對!!!
程序如下,你看看吧.
#include "windows.h"
#include "conio.h"
#include "stdio.h"
#define MAX 20 //定義緩沖池的最大容量是20
int count=5; //初始產品的數量為5
void Proclucer()//生產者函數
{
while(1)
{
if(count >= MAX)
{
printf("緩沖池已滿!等待 1 秒!\n");
Sleep(3000);
}
else
{
count++;
printf("生產了一個產品!當前產品的數量是: %d \n\n",count);
Sleep(1300); //注意毫秒為單位
}
}
}
void Consumer() //消費者函數
{
while(1)
{
if(count == 0)
{
printf("緩沖池已空!等待 2 秒!\n");
Sleep(2000);
}
else
{
count--;
printf("取出了一個產品!當前產品的數量是: %d \n\n",count);
Sleep(1000);
}
}
}
int tStop() //停止函數
{
getch(); //如果按回車的話,有時候要按兩次才可以停止,我還沒有解決這個問題
return 11; //但是按其他按鍵就會立即停止的了 呵呵!
}
void Start() //開始函數
{
int m;
HANDLE ahThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Proclucer,NULL,0,NULL);
HANDLE bhThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Consumer,NULL,0,NULL);
HANDLE hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)tStop,NULL,0,NULL); //多線程
m=tStop();
if(m==11) //滿足停止條件
{
CloseHandle(ahThread);
CloseHandle(ahThread);
CloseHandle(hThread);
printf("\nClose Thread Success!\n"); //停止成功
}
}
void main() //主函數
{
Start(); //開始
printf("\n");
}
③ 生產者-消費者」問題 用C語言編寫
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<semaphore.h>
#include<pthread.h>
#definePRODUCER10//生產者數量
#defineCONSUMER8//消費者數量
#defineBUFFER20//緩沖區數量
sem_tempty,full;//同步信號量
pthread_mutex_tmutex;//互斥信號量
intbuffer[BUFFER];//緩沖區
intprocer_id=0,consumer_id=0;//生產者消費者ID
intindex_in=0,index_out=0;//生產者消費者存放消費的位置
voidprint()//輸出緩沖區
{
inti;
printf("Buffer: ");
for(i=0;i<20;i++)
{
printf("___");
}
printf(" ");
for(i=0;i<20;i++)
printf("|%d|",buffer[i]);
printf(" ");
for(i=0;i<20;i++)
{
printf("———");
}
printf(" ");
}
void*Procer()//生產者函數
{
intID=++procer_id;
while(1)
{
sleep(3);
sem_wait(&empty);
pthread_mutex_lock(&mutex);
index_in=index_in%BUFFER;
printf("Procer%din%d. ",ID,index_in);
buffer[index_in]=1;//緩沖區置0
print();//輸出緩沖區情況
index_in++;
pthread_mutex_unlock(&mutex);
sem_post(&full);
}
}
void*Consumer()//消費者函數
{
intID=++consumer_id;
while(1)
{
sleep(3);
sem_wait(&full);
pthread_mutex_lock(&mutex);
index_out=index_out%BUFFER;
printf("