实验一进程同步(2)

2020-06-03 10:54

生产者进程:

4)实验结果

三.实验源代码

#include #include

const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度 unsigned short ProductID = 0; //产品号

unsigned short ConsumeID = 0; //将被消耗的产品号 unsigned short in = 0;

unsigned short out = 0;

int g_buffer[SIZE_OF_BUFFER]; bool g_continue = true; HANDLE g_hMutex; HANDLE g_hFullSemaphore; HANDLE g_hEmptySemaphore;

DWORD WINAPI Producer(LPVOID); //生产者线程 DWORD WINAPI Consumer(LPVOID); //消费者线程

int main() {

//创建各个互斥信号

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);

=

//总的线程数 const

unsigned

short

THREADS_COUNT

=

PRODUCERS_COUNT+CONSUMERS_COUNT;

HANDLE hThreads[PRODUCERS_COUNT]; //各线程的handle

DWORD producerID[CONSUMERS_COUNT]; //生产者线程的标识符

DWORD consumerID[THREADS_COUNT]; //消费者线程的标识符

//创建生产者线程

for (int i=0;i

hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,&producerID[i]);

if (hThreads[i]==NULL) return -1; }

//创建消费者线程

for ( i=0;i

hThreads[PRODUCERS_COUNT+i]=CreateThread(NULL,0,Consumer,NULL,0,&consumerID[i]);

if (hThreads[i]==NULL) return -1; }

while(g_continue){

if(getchar()){ //按回车后终止程序运行 g_continue = false; } }

return 0; }

void Produce() {

std::cerr << \ std::cerr << \}

//把新生产的产品放入缓冲区 void Append()


实验一进程同步(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2004年度社会综合治理工作自查报告(精)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: