多生产者多消费者多个缓冲区

上传人:mg****85 文档编号:37195537 上传时间:2018-04-08 格式:DOC 页数:7 大小:28KB
返回 下载 相关 举报
多生产者多消费者多个缓冲区_第1页
第1页 / 共7页
多生产者多消费者多个缓冲区_第2页
第2页 / 共7页
多生产者多消费者多个缓冲区_第3页
第3页 / 共7页
多生产者多消费者多个缓冲区_第4页
第4页 / 共7页
多生产者多消费者多个缓冲区_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《多生产者多消费者多个缓冲区》由会员分享,可在线阅读,更多相关《多生产者多消费者多个缓冲区(7页珍藏版)》请在金锄头文库上搜索。

1、多生产者多消费者多个缓冲区多生产者多消费者多个缓冲区#include “EOSApp.h“#define BUFFER_SIZE 10int BufferBUFFER_SIZE; /准备缓存int j=0;int OutIndex = 0;int i=0;int InIndex = 0;#define PRODUCT_COUNT 30HANDLE MutexHandle;HANDLE EmptySemaphoreHandle;HANDLE FullSemaphoreHandle; ULONG Producer(PVOID Param);/准备生产ULONG Consumer(PVOID Par

2、am);/回收/ main 函数参数的意义:/ argc - argv 数组的长度,大小至少为 1,argc - 1 为命令行参数的数量。/ argv - 字符串指针数组,数组长度为命令行参数个数 + 1。其中 argv0 固定指向当前/ 进程所执行的可执行文件的路径字符串,argv1 及其后面的指针指向各个命令行/ 参数。/ 例如通过命令行内容 “a:hello.exe -a -b“ 启动进程后,hello.exe 的 main 函/ 数的参数 argc 的值为 3,argv0 指向字符串 “a:hello.exe“,argv1 指向/ 参数字符串 “-a“,argv2 指向参数字符串 “-

3、b“。/int main(int argc, char* argv)/ 启动调试 EOS 应用程序前要特别注意下面的问题:/ 1、如果要在调试应用程序时能够调试进入内核并显示对应的源码,/ 必须使用 EOS 核心项目编译生成完全版本的 SDK 文件夹,然/ 后使用此文件夹覆盖应用程序项目中的 SDK 文件夹,并且 EOS/ 核心项目在磁盘上的位置不能改变。/ 2、在启动调试应用程序之前必须首先删除/禁用所有的断点,在断/ 点中断 (int 3) 被命中后才能重新添加/启用断点,否则启动/ 调试会失败。/HANDLE ProducerHandle3;HANDLE ConsumerHandle3;

4、#ifdef _DEBUG_asm(“int $3n nop“);#endif/* TODO: 在此处添加自己的代码 */MutexHandle = CreateMutex(FALSE,NULL);if(NULL=MutexHandle) return 1;EmptySemaphoreHandle = CreateSemaphore(BUFFER_SIZE,BUFFER_SIZE,NULL);if(NULL=EmptySemaphoreHandle) return 2;FullSemaphoreHandle = CreateSemaphore(0,BUFFER_SIZE,NULL);if(NU

5、LL=FullSemaphoreHandle) return 3;ProducerHandle0 = CreateThread( 0,Producer,NULL,0,NULL );if(NULL=ProducerHandle0)return 4;ConsumerHandle0 = CreateThread( 0,Consumer,NULL,0,NULL );if(NULL=ConsumerHandle0)return 5;ProducerHandle1= CreateThread( 0,Producer,NULL,0,NULL );if(NULL=ProducerHandle1)return

6、4;ConsumerHandle1= CreateThread( 0,Consumer,NULL,0,NULL );if(NULL=ConsumerHandle1)return 5;ProducerHandle2= CreateThread( 0,Producer,NULL,0,NULL );if(NULL=ProducerHandle2)return 6;ConsumerHandle2= CreateThread( 0,Consumer,NULL,0,NULL );if(NULL=ConsumerHandle2)return 7;WaitForSingleObject(ProducerHan

7、dle0,INFINITE);WaitForSingleObject(ConsumerHandle0,INFINITE);WaitForSingleObject(ProducerHandle1,INFINITE);WaitForSingleObject(ConsumerHandle1,INFINITE); WaitForSingleObject(ProducerHandle2,INFINITE);WaitForSingleObject(ConsumerHandle2,INFINITE);CloseHandle(MutexHandle);CloseHandle(EmptySemaphoreHan

8、dle);CloseHandle(FullSemaphoreHandle);CloseHandle(ProducerHandle0);CloseHandle(ConsumerHandle0);CloseHandle(ProducerHandle1);CloseHandle(ConsumerHandle1);CloseHandle(ProducerHandle2);CloseHandle(ConsumerHandle2);return 0;/ULONG Producer(PVOID Param)/Sleep(500);while(iPRODUCT_COUNT)WaitForSingleObjec

9、t(EmptySemaphoreHandle,INFINITE);WaitForSingleObject(MutexHandle,INFINITE);printf(“ Produce %dn“,i);BufferInIndex = i;InIndex = (InIndex+1)%BUFFER_SIZE;ReleaseMutex(MutexHandle);ReleaseSemaphore(FullSemaphoreHandle,1,NULL);i+;Sleep(500);return 0;ULONG Consumer(PVOID Param)while(jPRODUCT_COUNT)WaitForSingleObject(FullSemaphoreHandle,INFINITE);WaitForSingleObject(MutexHandle,INFINITE);printf(“ttt Consume %dn“,BufferOutIndex);OutIndex = (OutIndex+1)%BUFFER_SIZE;j+;ReleaseMutex(MutexHandle);ReleaseSemaphore(EmptySemaphoreHandle,1,NULL);if(i10)Sleep(2000);elseSleep(100);return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号