生产者消费者程序问题!
//******************************************************************************// //* 实验一 生产者消费者问题 *// //******************************************************************************// #include#include #include typedef HANDLE SEMAPHORE; #define P(S) WaitForSingleObject(S,INFINITE); #define V(S) ReleaseSemaphore(S,1,NULL); const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度 unsigned short ProductID = 0; //产品号 unsigned short ConsumeID = 0; //将被消耗的产品号 unsigned short in = 0; //产品进缓冲区时的缓冲区下标 unsigned short out = 0; //产品出缓冲区时的缓冲区下标 struct node//定义链表的一个结点 { int data; node* next; }; class CircleLinkList { public: node *CreateCircleLinkList(); void DeleteCircleLinkList(node *pLinkList); private: node *currentNode,*headNode; }; node* CircleLinkList::CreateCircleLinkList()//创建循环链表 { node *s; if(SIZE_OF_BUFFER>=1) { headNode=new node; headNode->data=0; currentNode=headNode; for(int i=1;i<=SIZE_OF_BUFFER-1;i++) { s=new node; s->data=0; currentNode->next=s; s->next=currentNode->next; currentNode=s; } currentNode->next=headNode; return headNode; } else { return NULL; } } void CircleLinkList::DeleteCircleLinkList(node* pLinkList)//释放链表所用内存 { if(SIZE_OF_BUFFER>=1) { headNode=pLinkList; currentNode=headNode->next; delete headNode; for(int i=1;i<=SIZE_OF_BUFFER-1;i++) { headNode=currentNode; currentNode=currentNode->next; delete headNode; } } } bool g_continue = true; //控制程序结束 HANDLE g_hMutex; //用于线程间的互斥 HANDLE g_hEmptySemaphore; //当缓冲区满时迫使生产者等待 HANDLE g_hFullSemaphore; //当缓冲区空时迫使消费者等待 DWORD WINAPI Producer(LPVOID); //生产者线程 DWORD WINAPI Consumer(LPVOID); //消费者线程 node* pLinkList,*pIn,*pOut;//定义链表的头结点,可放下一个产品的结点,下一个可取出产品消费的结点 int main() { //新建一个文件,用于记录生产者消费者访问缓冲区的过程 FILE *fp; if((fp=fopen("1.txt","w"))==NULL) { cout<<"错误,文件打不开,请检查文件名"< data=ProductID; pIn=pIn->next; //输出缓冲区当前的状态 node *currentList=pLinkList; for (int i=0;i data); cout<data; if (currentList==pIn) { fprintf(fp, " <-- 可放下一个产品的位置"); cout<<" <-- 可放下一个产品的位置"; } if (currentList==pOut ) { fprintf(fp," <-- 下一个可取出产品消费的位置"); cout<<" <-- 下一个可取出产品消费的位置"; } fprintf(fp,"\n"); cout< next; } fclose(fp); } //从缓冲区中取出一个产品 void TakeFromBuffer() { //已"a"(追加内容)的形式打开文件,将新的缓冲区情况写入文件 FILE *fp; if((fp=fopen("1.txt","a"))==NULL) { cout<<"错误,文件打不开,请检查文件名"< data; pOut->data=0; pOut=pOut->next; if(ConsumeID%10==1) { fprintf(fp,"\nConsume the %dst product from buffer... \n",ConsumeID); cout<<"\nConsume the "< data); cout<data; if (currentList==pIn) { fprintf(fp, " <-- 可放下一个产品的位置"); cout<<" <-- 可放下一个产品的位置"; } if (currentList==pOut ) { fprintf(fp, " <-- 下一个可取出产品消费的位置"); cout<<" <-- 下一个可取出产品消费的位置"; } fprintf(fp,"\n"); cout< next; } fclose(fp); } //生产者 DWORD WINAPI Producer(LPVOID lpPara) { while(g_continue) { P(g_hEmptySemaphore); P(g_hMutex); AddToBuffer(); Sleep(500); V(g_hMutex); V(g_hFullSemaphore); } return 0; } //消费者 DWORD WINAPI Consumer(LPVOID lpPara) { while(g_continue) { P(g_hFullSemaphore); P(g_hMutex); TakeFromBuffer(); Sleep(500); V(g_hMutex); V(g_hEmptySemaphore); } return 0; } 这个程序能运行,但是一到生产者6就会卡在那里不会动,是什么问题?应该如何修改?
更新时间:2023-08-10 21:08
最满意答案
我也很喜欢久石让的钢琴曲 SUMMER是很经典的 还有《失去温暖》、《天空之城》、《Ashitaka and San》、《Asian dream song》、《The Rain》、《summer One 's Day》、《The Wind of Life》这些都是久石让的。我很喜欢。很悠然的感觉。平静中带着悲伤。还有我比较喜欢的是《tina》。你应该也会喜欢的`` 这些百度上都我。我就不发地址了,如果发地址,就是直接下载的。很麻烦。
其他回答
去听久石让的,非常有感觉。越听越觉得他是大师。
从沉默中走来。。。。。很好听。。。类似与久石让
天空之城、Lost Warmth(失去温暖)、Spring、Friends、Ashitaka and San、Green Requiem……貌似失去温暖网上只有mid的,不过有琴谱可以查到。 久石让的《Piano Story》的那几张专辑里有很多好听的,《ENCORE》那张里也全是钢琴曲,都是经典之作。
相关问答
更多-
spring钢琴曲久石让 几级[2022-09-22]
同意楼上的,久石让的钢琴曲没有什么难度,练练就行。。。硬要说个级别,顶天也就三四级。。。久石让的钢琴曲不是练习曲、考级曲一类的了,只是一种流行、通俗风格的普通钢琴曲。。。。 -
推荐像久石让--spring 复苏(独奏钢琴曲)这样的钢琴曲[2023-10-28]
River flows in you yiruma(李闰珉) leave behind yiruma 海鸥的梦 全素妍 蓝色海洋与白色蝴蝶 全素妍 ashitaka and san 久石让 -
spring钢琴视频教程哪里有啊(久石让)[2023-08-09]
!!LZ打算盲弹啊!,!很可惜的告诉您!我2年前就搜过了!木有!学了两年钢琴后,,,还是木有!最近在弹这首曲子,可以跟您说!比较繁琐!木有基础想弹的话!基本不可能!LZ把邮箱可以给我!我到是可以给你写份简谱!这要比视屏还看的开阔点!不过还是劝您多练练练习曲!虽然无聊!但那是基础!不能总是找这种视频!慢慢来吧! LZ邮箱(画的不好且骂- -) -
钢琴曲 久石让的spring,和summer,哪个难, 我summer学了一个礼拜。[2023-06-18]
都挺简单的~summer我是后来才弹的,这首比较要注意连贯和跳音 spring右手音密集的地方安排下指法就差不多了 -
Omar Akram - Run Away With Me - 纯音乐版 求类似这种类型的纯音[2022-04-19]
summer -
久石让的summer和spring哪个简单?[2022-05-24]
这个也太专业了吧...另外,这个不能算是电脑问题 应该划到音乐区 久石让我也喜欢 不过对天空之城更喜欢一些 -
钢琴曲 久石让的spring,和summer,哪个难, 我summer学了一个礼拜。[2023-12-24]
都挺简单的~summer我是后来才弹的,这首比较要注意连贯和跳音 spring右手音密集的地方安排下指法就差不多了 -
推荐一些久石让好听的曲子!![2022-07-31]
奔放的音符》和《水の旅人》 本人认为最经典的两张专辑。。。 久石让 Joe Hisaishi -《奔放的音符》(Freedom)动画配乐与广告曲精选[MP3!] 【下载地址】 http://www.verycd.com/topics/82802/ 《琴话绵绵最爱精选 '88-'08》也不错 虽然重复了《奔放的音符》的两首 但其他的都是久石让最为重要 最具代表性的电影插曲。 下载地址 http://www.verycd.com/topics/264423/ 以上的下载地址都是电驴的 http://www.ve ... -
求久石让的钢琴谱[2022-04-10]
天空之城:1 2 3 4 http://hiphotos.baidu.com/springlory/pic/item/0d29987fb6f34a190cd7dab4.jpg http://hiphotos.baidu.com/springlory/pic/item/448e62ec0b00a4f5b31cb1b4.jpg http://hiphotos.baidu.com/springlory/pic/item/b945b62e2a7b07191f3089b4.jpg http://hiphotos.ba ... -
能推荐一些类似于卡农canon 久石让演奏 summer 的钢琴单曲吗?[2023-01-28]
我也很喜欢久石让的钢琴曲 SUMMER是很经典的 还有《失去温暖》、《天空之城》、《Ashitaka and San》、《Asian dream song》、《The Rain》、《summer One 's Day》、《The Wind of Life》这些都是久石让的。我很喜欢。很悠然的感觉。平静中带着悲伤。还有我比较喜欢的是《tina》。你应该也会喜欢的`` 这些百度上都我。我就不发地址了,如果发地址,就是直接下载的。很麻烦。