首页 \ 问答 \ 生产者消费者程序问题!

生产者消费者程序问题!

//******************************************************************************// //*                 实验一    生产者消费者问题                                 *// //******************************************************************************// 
 #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;idata);     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》那张里也全是钢琴曲,都是经典之作。

相关问答

更多
  • 同意楼上的,久石让的钢琴曲没有什么难度,练练就行。。。硬要说个级别,顶天也就三四级。。。久石让的钢琴曲不是练习曲、考级曲一类的了,只是一种流行、通俗风格的普通钢琴曲。。。。
  • River flows in you yiruma(李闰珉) leave behind yiruma 海鸥的梦 全素妍 蓝色海洋与白色蝴蝶 全素妍 ashitaka and san 久石让
  • !!LZ打算盲弹啊!,!很可惜的告诉您!我2年前就搜过了!木有!学了两年钢琴后,,,还是木有!最近在弹这首曲子,可以跟您说!比较繁琐!木有基础想弹的话!基本不可能!LZ把邮箱可以给我!我到是可以给你写份简谱!这要比视屏还看的开阔点!不过还是劝您多练练练习曲!虽然无聊!但那是基础!不能总是找这种视频!慢慢来吧! LZ邮箱(画的不好且骂- -)
  • 都挺简单的~summer我是后来才弹的,这首比较要注意连贯和跳音 spring右手音密集的地方安排下指法就差不多了
  • 这个也太专业了吧...另外,这个不能算是电脑问题 应该划到音乐区 久石让我也喜欢 不过对天空之城更喜欢一些
  • 都挺简单的~summer我是后来才弹的,这首比较要注意连贯和跳音 spring右手音密集的地方安排下指法就差不多了
  • 奔放的音符》和《水の旅人》 本人认为最经典的两张专辑。。。 久石让 Joe Hisaishi -《奔放的音符》(Freedom)动画配乐与广告曲精选[MP3!] 【下载地址】 http://www.verycd.com/topics/82802/ 《琴话绵绵最爱精选 '88-'08》也不错 虽然重复了《奔放的音符》的两首 但其他的都是久石让最为重要 最具代表性的电影插曲。 下载地址 http://www.verycd.com/topics/264423/ 以上的下载地址都是电驴的 http://www.ve ...
  • 天空之城: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 ...
  • 我也很喜欢久石让的钢琴曲 SUMMER是很经典的 还有《失去温暖》、《天空之城》、《Ashitaka and San》、《Asian dream song》、《The Rain》、《summer One 's Day》、《The Wind of Life》这些都是久石让的。我很喜欢。很悠然的感觉。平静中带着悲伤。还有我比较喜欢的是《tina》。你应该也会喜欢的`` 这些百度上都我。我就不发地址了,如果发地址,就是直接下载的。很麻烦。

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。