从品牌网站建设到网络营销策划,从策略到执行的一站式服务
线程间的数据共享
创新互联专业为企业提供武陵源网站建设、武陵源做网站、武陵源网站设计、武陵源网站制作等企业网站建设、网页设计与制作、武陵源企业网站模板建站服务,十多年武陵源做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
多个线程共享数据, 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,可以执行某些操作。。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图