⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11.txt

📁 用多进程同步方法解决生产者——消费者问题
💻 TXT
字号:

[file head]:
//本程序于2007.12.24在VC++6.0下运行通过 
//系统环境:Windows XP 
#include <windows.h> 
#include <iostream> 

const unsigned short SIZE_OF_BUFFER = 20;//有界缓冲区长度 
int g_buffer[SIZE_OF_BUFFER];//开辟缓冲区,用数组表示,可以看成是一个循环队列 
unsigned short ProductID = 0;//新生产出来的产品的产品号 
unsigned short ConsumeID = 0;//被消耗的产品的产品号 
unsigned short in = 0;//产品进缓冲区时的缓冲区下标,用于记录生产者的指针位置 
unsigned short out = 0;//产品出缓冲区时的缓冲区下标,用于记录消费者的指针位置 
bool g_continue = 1;//控制程序运行:1表示继续运行,0表示停止运行 
HANDLE g_hMutex;//线程间的互斥信号量 
HANDLE g_hFullSemaphore;//资源信号量:缓冲区满 
HANDLE g_hEmptySemaphore;//资源信号量:缓冲区空 
DWORD WINAPI Producer(LPVOID);//生产者线程 
DWORD WINAPI Consumer(LPVOID);//消费者线程 
const unsigned short PRODUCERS_COUNT=4;//生产者的个数 
const unsigned short CONSUMERS_COUNT=3;//消费者的个数 
const unsigned short THREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COUNT;//总线程数 
HANDLE 
... ...
[file tail]:
... ...


/*---------------------------创建消费者线程开始-----------------------------*/ 
void createCT()//创建消费者线程 
{ 
for (int j=0;j<CONSUMERS_COUNT;++j) 
{ 
hThreads[PRODUCERS_COUNT+j]=CreateThread(NULL,0,Consumer,NULL,0,&amt;consumerID[j]); 
if (hThreads[j]==NULL) 
g_continue=0; 
} 
} 
/*---------------------------创建消费者线程结束-----------------------------*/ 

/*-------------------------------主函数开始---------------------------------*/ 
int main() 
{ 
//显示程序提示信息 
info(); 
//创建互斥信号量 
g_hMutex=CreateMutex(NULL,FALSE,NULL); 
//创建资源信号量 
g_hFullSemaphore=CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL); 
g_hEmptySemaphore=CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL); 
//创建生产者线程 
createPT(); 
//创建消费者线程 
createCT(); 
//不按回车键的话程序会一直运行下去 
while(g_continue) 
//按回车键终止程序 
if(getchar()) 
g_continue = 0; 
} 
/*-------------------------------主函数结束---------------------------------*/ 








⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -