当前位置: 首页 > news >正文

做网站大概要多少做推广怎么让别人加你

做网站大概要多少,做推广怎么让别人加你,做app网站的软件有哪些内容,怎么和网站建设公司签合同死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局#xff0c;当进程处于这种僵持状态时#xff0c;若无外力作用#xff0c;它们都将无法再向前推进。之前信号量的时候我们知道#xff0c;如果多个进程等待#xff0c;主要体现在占有锁的问题上。死锁也可以被定义…死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局当进程处于这种僵持状态时若无外力作用它们都将无法再向前推进。之前信号量的时候我们知道如果多个进程等待主要体现在占有锁的问题上。死锁也可以被定义为一组竞争系统资源或互相通信的进程间相互的永久阻塞。当一组进程中的所有进程都在等待一个事件而只有在进程集合中的其他阻塞的进程才可以触发该事件这时就称一组进程死锁。因为没有事件触发因此死锁是永久性的。 产生死锁的原因有 1竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等其数目不足以满足诸进程的需要时会引起诸进程对资源的竞争而产生死锁。 2进程间推进顺序非法。进程在运行过程中请求和释放资源的顺序不当也同样会导致产生进程死锁。 详细分析一下产生死锁的原因哦。 1可剥夺和非剥夺性资源 可剥夺性资源指某进程在获得这类资源后该资源可以再被其他进程或系统剥夺。如优先级高的可以剥夺优先级低的进程的处理机。非剥夺性资源是当这类资源分配给某进程后再不能强行收回只能在进程用完后自行释放。 2竞争非剥夺性资源 由于它们的数量不能满足诸进程运行的需要会使进程在运行过程中因剥夺这些资源而陷入僵局。 比如系统中有一台打印机R1和一台磁带机R2供进程P1,P2共享。如果P1占用了打印机P2占用了磁带机。此时如果P1想使用磁带机而P2想使用打印机这就使P1和P2都在等待对方的资源被释放而陷入僵局。从而也使P1和P2得不到自己的资源而不能释放现有的资源最后进入死锁状态。 3竞争临时性资源 上述的打印机资源属于顺序性重复使用的资源属于永久性资源。还有一种是临时性资源是一个进程产生由另一进程使用短暂时间后无用的资源。也可能产生死锁。 4推进顺序不当。P1—Request(R2),p2—Request(R1)时产生死锁。 产生死锁的必要条件 如果发生死锁则有四个产生死锁的必要条件 1互斥条件。一次只有一个进程使用资源其他进程不能访问已分配的资源。 2请求和保持条件也称占有且等待。指进程已经保持了至少一个资源但又提出了新的资源请求而该资源又已被其他进程占有此时请求进程阻塞但又对自己已获得的其他资源保持不放。 3不剥夺条件非抢占。指进程已获得的资源在未使用完之前不能被剥夺只能在使用完自己释放。 4环路等待循环等待。指存在一个封闭的进程链使得每个资源至少占有此链中下一个进程所需要的一个资源。在发生死锁时必然存在一个进程资源的环形链即P0P1P2….Pn则P0在等待P1占有的资源P1占有P2的….Pn占有P0的。 说完死锁之后我们应该想想如何处理这种死锁呢。处理死锁的基本方法有预防死锁避免死锁检测死锁解除死锁。 预防死锁是使四个必要条件中的第2,3,4个中的一个不成立来避免不发生死锁。为预防死锁可以使请求和保持条件中可以要求进程一次性地请求所有需要的资源并且阻塞这个进程直到所有请求都同时满足。对于非抢占式的预防死锁的方法如果占有某些资源的一个进程进行进一步资源请求被拒绝则该进程必须释放它最初占用的资源如果有必要可以再次请求此类资源。还有一种情况是如果一个进程请求当前被另一个进程占有的一个资源则操作系统可以抢占另一个进程要求它释放资源。这类情况适合具有不同优先级的进程 死锁避免 解决死锁问题的另一种方法是死锁避免。与死锁预防的差距也不大。这里有俩种死锁避免的方法 1.如果一个进程的请求会导致死锁则不启动此进程 2.如果一个进程增加资源的请求导致死锁则不允许此分配 这里解决死锁问题的方法有银行家算法 银行家算法通过已分配的资源和可用资源数等来获取安全序列如果存在安全序列就可以分配请求资源不存在则说明不可以请求资源这样就可以有效的避免死锁。 1请求资源发出请求向量 2假定可为P1分配资源修改Available,Allocation和Need向量 3利用安全性算法检查此时系统是否安全 银行家算法需求分析 允许进程动态地申请资源系统在每次实施资源分配之前先计算资源分配的安全性若此次资源分配安全即资源分配后系统能按某种顺序来为每个进程分配其所需的资源直至最大需求使每个进程都可以顺利地完成便将资源分配给进程否则不分配资源让进程等待。 功能实现 理解了死锁的原因尤其是产生死锁的四个必要条件就可以最大可能地避免、预防和解除死锁。所以在系统设计、进程调度等方面注意如何能够不让这四个必要条件成立如何确定资源的合理分配算法避免进程永久占据系统资源。此外也要防止进程在处于等待状态的情况下占用资源,在系统运行过程中对进程发出的每一个系统能够满足的资源申请进行动态检查并根据检查结果决定是否分配资源若分配后系统可能发生死锁则不予分配否则予以分配 。因此对资源的分配要给予合理的规划。 1) 可利用资源向量Available。这是一个含有m个元素的数组其中的而每一个元素代表一类可利用资源数目其初始值是系统中所配置的该类全部可用资源的数目其数值随该类资源的分配和回收而动态的改变。如果Available[j]K,则表示系统中现有Rj类资源K个。 2) 最大需求矩阵Max。这是一个n*m的矩阵它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]K则表示进程i需要Rj类资源的最大数目为K。 3) 分配矩阵Allocation。这也是一个n*m的矩阵它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]K则表示进程i当前已分得Rj类资源的数目为K。 4) 需求矩阵Need。这也是一个n*m的矩阵用以表示每一个进程尚需的各类资源数。如果Need[i,j]K,则表示进程i还需要Rj类资源K个方能完成任务。 上述三个矩阵间存在下述关系Need[i,j]Max[i,j]-Allocation[i,j] #define _CRT_SECURE_NO_WARNINGS 1 extern C #includestdio.h #includestdlib.h #define W 10 int Available[W]; //可使用资源 int Max[W][W]; //最大需求资源数 int Allocation[W][W]; //已分配资源 int Need[W][W]; //需求资源 int Work[W]; //工作向量 int Finish[W]; //是否有足够的资源分配状态标志 int Request[W][W]; //进程申请资源向量 int Temp[W]; //暂存可用资源数 int AllReSourceNum[W]; //各类资源总数 int i, j; int ResourceNum; //系统资源总数 int ProcessNum; //总的进程数 int a; //当前申请的进程号 int l, e; int b 0, c 0, f 0, g; //c: 统计对于每一个进程成功分配的资源类别数 int SecurityCheck() //安全性检测 {printf(\n\n);printf(\t\t\t 安全性检测 \n\n);printf( 工作向量 尚需求量 已分配 工作向量已分配\n进程 );for (c 1; c 4; c){for (j 1; j ResourceNum; j){printf( %d类, j);}}for (i 1; i ProcessNum; i){Temp[i] Available[i]; //Temp[i]只是一个暂时寄存的中间变量为防止在下面安全性检查时修改到Available[i]而代替的一维数组Finish[i] false;}for (g 1; g ProcessNum; g){for (i 1; i ProcessNum; i){b 0; //计数器初始化Finish[i] false;for (j 1; j ResourceNum; j){if (Need[i][j] Temp[j]){b b 1;}if (Finish[i] false b ResourceNum){Finish[i] true;printf(\nP[%d] , i); //依次输出进程安全序列 for (l 1; l ResourceNum; l){printf( %2d , Temp[l]);}for (j 1; j ResourceNum; j){printf( %2d ,Need[i][j]);}for (j 1; j ResourceNum; j){//Allocation[i][j]Temp[j]-Need[i][j];printf( %2d , Allocation[i][j]);}for (j 1; j ResourceNum; j){printf( %2d , Temp[j] Allocation[i][j]);}for (l 1; l ResourceNum; l){Temp[l] Temp[l] Allocation[i][l]; }}}}}printf(\n\n);for (i 1; i ProcessNum; i){if (Finish[i] true) f f 1; //统计Finish[i]true的个数}if (f ProcessNum){printf(安全序列);printf(\n\n系统剩余资源量);for (i 1; i ResourceNum; i){printf( %d , Available[i]);}f 0; //将计数器f重新初始化为下一次提出新的进程申请做准备return 1;}else{printf(不安全序列);return 0;} } void Initialize() //初始化 {printf(请输入系统的资源种类数);scanf(%d, ResourceNum);for (i 1; i ResourceNum; i){printf(第%d类资源总数, i);scanf(%d, AllReSourceNum[i]);}printf(请输入进程总数);scanf(%d, ProcessNum);for (i 1; i ProcessNum; i){for (j 1; j ResourceNum; j){printf(进程P[%d]对第%d类资源的最大需求量, i, j);scanf(%d, Max[i][j]);}}for (i 1; i ProcessNum; i){for (j 1; j ResourceNum; j){printf(进程P[%d]对第%d类资源已分配数, i, j);scanf(%d, Allocation[i][j]);Need[i][j] Max[i][j] - Allocation[i][j];}}for (i 1; i ResourceNum; i){for (j 1; j ProcessNum; j){AllReSourceNum[i] - Allocation[j][i];}}for (i 1; i ResourceNum; i)Available[i] AllReSourceNum[i];SecurityCheck(); } void RequestResource() //进程申请资源 {printf(请输入申请资源的进程);scanf(%d, a);for (i 1; i ResourceNum; i){printf(请输入进程P[%d]对%d类资源的申请量, a, i);scanf(%d, Request[a][i]);if (Request[a][i] Need[a][i]){printf(\n出错进程申请的资源数多于它自己申报的最大需求量\n);return;}if (Request[a][i] Available[i]){printf(\nP[%d]请求的资源数大于可用资源数必须等待\n, a);return;}}for (i 1; i ResourceNum; i){//以下是试探性分配Available[i] Available[i] - Request[a][i];Allocation[a][i] Allocation[a][i] Request[a][i];Need[a][i] Need[a][i] - Request[a][i];}int retSecurityCheck();if (ret 1){int key 0;for (j 1; j ResourceNum; j){if (Need[a][j] 0){key;}}if (key ResourceNum){for (j 1; j ResourceNum; j){Available[j] Allocation[a][j];Allocation[a][j] 0;}}} }void ResourceState() {printf(\n\n);printf( 已分配 最大需求量 尚需要量 \n进程);for (i 1; i 3; i){for (j 1; j ResourceNum; j){printf( %d类, j);}}for (i 1; i ProcessNum; i){printf(\nP[%d], i);for (j 1; j ResourceNum; j){printf( %2d , Allocation[i][j]);}for (j 1; j ResourceNum; j){printf( %2d , Max[i][j]);}for (j 1; j ResourceNum; j){printf( %2d ,Need[i][j]);}}printf(\n\n系统剩余资源量 );for (i 1; i ResourceNum; i){printf( %d , Available[i]);}printf(\n); }void menu() {printf(\n\t-------------银行家算法---------------\n);printf( 1、初始化 \n);printf( 2、进程请求资源 \n);printf( 3、资源分配状态 \n);printf( 4、退出 \n);printf(\t--------------------------------------\n);printf(\n请输入你的选择: ); } //BankerAlth.cpp #includeBankerAlth.h int main() {int select 0;printf(\n\n);while (1){menu();scanf(%d, select);printf(\n\n);switch (select){case 1:Initialize();break;case 2:RequestResource();break;case 3:ResourceState();break;case 4:printf(\nSee you Next time !\n\n);system(pause);return 0;}}system(pause);return 0; } 运行结果
http://www.zqtcl.cn/news/745178/

相关文章:

  • 国外网站推广方法wnmp 搭建WordPress
  • 网站建设流程 文档企业网上办事大厅
  • .net怎么做网站域名备案注销流程
  • 检测网站建设网站搭建注意事项
  • 河北建设工程信息网站网站的建设要多少钱
  • 玉林住房和城乡建设局网站官网google广告在wordpress
  • 海淀网站建设公司wordpress 招聘网站模板
  • 手机网站在哪里找到网上能免费做网站发布叼
  • 网站设置英文怎么说广州优质网站建设案例
  • 外贸怎样做网站临汾花果街网站建设
  • 专业集团门户网站建设方案南昌医院网站建设
  • 用php做美食网站有哪些新建网站如何做关键词
  • 企业网站建设招标微信公众平台官网登录入口网页版
  • 网站宣传图网站程序预装
  • 网站设计论文选题seo排名优化推广报价
  • wordpress图床网站百度链接收录
  • 八年级信息网站怎么做电商网站的支付接入该怎么做呢
  • wordpress 的应用大兴安岭地网站seo
  • 网站建站作业做直播网站赚钱
  • 网站建设虍金手指花总简单免费制作手机网站
  • 京东网站是刘强冬自己做的吗献县网站建设价格
  • 余姚什么网站做装修比较好邢台企业做网站哪儿好
  • 网站建设后端国外购物平台排行榜前十名
  • 西安做百度推广网站 怎样备案简述商务网站建设
  • 如何建设本地网站东莞常平限电通知2021
  • 成都网站建设cdajcx重庆推广网站排名价格
  • 建网站的价格网店设计方案计划书
  • 长沙做公司网站如何制作个人网站教程
  • 做一个网站怎么做的仿qq网站程序
  • 曲靖市建设局网站官网织梦可以放两个网站