多线程共享数据-创新互联

线程间的数据共享

创新互联建站是一家专业提供夷陵企业网站建设,专注与成都网站设计、网站制作、H5响应式网站、小程序制作等业务。10年已为夷陵众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

    多个线程共享数据, A线程生产物品,产品数量增加,B线程使用,那么产品数量减少,B线程如何知道产品buf是否为空呢?A线程如何判断产品buf为满?
1 轮询机制
     线程每隔一定时间检查缓冲区,如果有产品就取出,这种机制需要控制好轮询间隔,查询太频繁会导致占用cpu过多,浪费;查询太不频繁导致缓冲区满,生产者放不进去产品
 int buf[MAX];
 int ProductionCount;
 while(1)
 {
 Msleep(100);
    if(ProductionCount > 0)
      {
       use it;
    ProductionCount --;
   }
 }
 2,信号量机制
     信号量和线程,互斥锁等一样,是操作系统提供的功能
  对于上述问题,可以创建一个信号量对象,生产线程每次生产完可以调用post使得信号量+1,消费只调用wait函数;使信号量减1,如果信号量为0,消费线程会等待,,
  Semaphore sem(0);
  A线程
      while(1)
   {
       ...
    sem.post();
   }
    B线程
     while(1)
  {
      ....
   sem.wait();     //如果信号量为0,那么会等待,
  }
 超时等待
 int res = sem。wait(1000); //ms
 if( res != 0)
   。。。。。;
 如果等待超过 1000秒,那么res返回 !0,可以执行某些操作。。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:多线程共享数据-创新互联
文章来源:http://ybzwz.com/article/doiedj.html