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

网站建设管理需要招聘什么人才wordpress建立cms

网站建设管理需要招聘什么人才,wordpress建立cms,网络工程设计项目方案设计,搜索引擎排名国内这个问题是经典生产者-消费者问题的一个非常有趣的变种,它引入了“产品分类”的概念,使得同步关系变得更加复杂和精妙。我们来把它彻底剖析清楚。这个“苹果橘子”问题,其实是在模拟一个更真实的场景:一个任务队列,但队…

这个问题是经典生产者-消费者问题的一个非常有趣的变种,它引入了“产品分类”的概念,使得同步关系变得更加复杂和精妙。我们来把它彻底剖析清楚。

这个“苹果橘子”问题,其实是在模拟一个更真实的场景:一个任务队列,但队列中的任务有不同的类型,需要由不同的处理器来处理

我们还是用视频里的家庭场景,因为它非常直观。

  • 盘子:一个容量为 1 的缓冲区。
  • 父亲 (Producer_Apple):只生产苹果。
  • 母亲 (Producer_Orange):只生产橘子。
  • 女儿 (Consumer_Apple):只吃苹果。
  • 儿子 (Consumer_Orange):只吃橘子。

1. 关系分析:四个人,一盘菜,规矩真不少

我们来梳理一下这个家庭里错综复杂的关系网。

1.1 互斥关系
  • 盘子是临界资源:无论谁往盘子里放水果,或者从盘子里取水果,这个“操作盘子”的动作必须是互斥的。不能父亲刚把苹果放上去,母亲就把橘子盖上去了。
1.2 同步关系(四对)

这是一个多对多的同步网络,我们需要仔细分析:

  1. 父亲 vs. 女儿:父亲放了苹果,女儿才能吃。这要求盘子里有苹果时,女儿才能行动。
  2. 母亲 vs. 儿子:母亲放了橘子,儿子才能吃。这要求盘子里有橘子时,儿子才能行动。
  3. 父亲 vs. 全家:父亲想放苹果,但必须等到盘子是空的。谁能让盘子变空?可能是吃掉苹果的女儿,也可能是吃掉橘子的儿子。
  4. 母亲 vs. 全家:母亲想放橘子,也必须等到盘子是空的。同样,可能是女儿或儿子让盘子变空。

2. 用信号量来“量化”这些关系

根据上面的分析,我们可以定义出需要的信号量。

  • mutex (互斥信号量):代表“操作盘子”的许可。初始值为 1。(但我们后面会讨论,当缓冲区为1时,这个可以被优化掉)。
  • apple (同步信号量):代表盘子里“苹果”的数量。初始盘子是空的,所以 apple 初始值为 0
  • orange (同步信号量):代表盘子里“橘子”的数量。初始盘子也是空的,所以 orange 初始值为 0
  • plate (同步信号量):代表盘子里“空位”的数量。盘子容量为1,初始是空的,所以 plate 初始值为 1

3. 代码实现:每个家庭成员的“行动指南”

父亲 (Producer_Apple)
semaphore apple = 0, orange = 0, plate = 1;father() {while(true) {准备一个苹果;P(plate);     // 1. 等待盘子变空。如果盘子有水果,阻塞。把苹果放到盘子里; // 临界操作V(apple);     // 2. 通知女儿:有苹果可以吃了!}
}
母亲 (Producer_Orange)
mother() {while(true) {准备一个橘子;P(plate);     // 1. 等待盘子变空。把橘子放到盘子里; // 临界操作V(orange);    // 2. 通知儿子:有橘子可以吃了!}
}
女儿 (Consumer_Apple)
daughter() {while(true) {P(apple);     // 1. 等待盘子里有苹果。如果没有,阻塞。从盘子里取出苹果; // 临界操作V(plate);     // 2. 通知父母:盘子现在空了!吃掉苹果;}
}
儿子 (Consumer_Orange)
son() {while(true) {P(orange);    // 1. 等待盘子里有橘子。从盘子里取出橘子; // 临界操作V(plate);     // 2. 通知父母:盘子现在空了!吃掉橘子;}
}

4. 核心考点:互斥信号量真的需要吗?

这是这个问题最精妙的地方,也是一个重要的考点。在上面的代码里,我们并没有显式地使用 mutex 信号量,为什么还能保证互斥?

答案是:当缓冲区大小为1时,同步信号量本身就能起到互斥的作用。

我们来分析一下这个机制:

  1. 三个同步信号量 plateappleorange,它们的初始值加起来是 1 + 0 + 0 = 1
  2. 观察整个流程,每次P操作都会使信号量总和减1,每次V操作都会使总和加1。所以,在任何时刻,plate + apple + orange 的值恒等于 1
  3. 这意味着,这三个信号量中,永远最多只有一个的值是1,另外两个必然是0。
  4. 要想进入临界区(操作盘子),无论是生产者还是消费者,都必须成功执行一个P操作(P(plate)P(apple) 或 P(orange))。
  5. 因为这三个信号量中最多只有一个是1,所以在任何一个时刻,最多只有一个进程能成功执行P操作而不被阻塞
  6. 这就隐式地实现了互斥!比如,父亲执行 P(plate) 成功后,plate变为0,而appleorange也都是0。此时任何其他想操作盘子的进程,无论执行哪个P操作,都会被阻塞。

重要结论

  • 当缓冲区大小为1时,可以利用同步信号量实现互斥,无需额外的 mutex
  • 当缓冲区大小大于1时,这种隐式互斥就不成立了。比如缓冲区大小为10,plate初值为10。父亲放一个苹果后,plate变为9,母亲仍然可以成功执行 P(plate),导致两个生产者同时操作缓冲区。因此,缓冲区大于1时,必须添加独立的 mutex 信号量来保证互斥。

必会题与详解

题目一:在这个“苹果-橘子”问题中,信号量 plate 的作用是什么?为什么父亲和母亲都需要对它执行P操作,而女儿和儿子都需要对它执行V操作?

答案详解

  1. plate 的作用:信号量 plate 是一个同步信号量,它代表了盘子中可用“空位”的数量。在本题中,由于盘子容量为1,plate 的值 фактически (事实上) 表示“盘子是否为空”。plate=1 表示盘子为空,plate=0 表示盘子非空。

  2. 父亲和母亲执行 P(plate):父亲和母亲都是生产者,他们想要放水果的前提条件是“盘子必须是空的”。因此,他们在放水果之前,需要执行 P(plate) 来“申请”这个空位。如果 plate 为0(盘子非空),他们就会被阻塞,实现了“盘子满了就等待”的同步关系。

  3. 女儿和儿子执行 V(plate):女儿和儿子都是消费者,他们的行为会产生一个结果,即“让盘子变空”。在他们取走水果之后,需要通过执行 V(plate) 来“释放”一个空位,或者说“发送一个盘子已空的信号”。这个V操作会唤醒一个可能正在等待空位的父亲或母亲,让他们可以继续放水果。

题目二:如果我们将问题修改为“盘子可以放一个苹果和一个橘子(总容量为2)”,那么原来的解决方案还正确吗?如果不正确,需要如何修改?

答案详解

原来的解决方案不正确,需要进行修改。

  1. 不正确的原因:原来的方案利用了 plate+apple+orange=1 这个特性来隐式实现互斥。当总容量变为2时,这个特性被打破了。

    • 例如,初始时盘子全空。父亲可以执行 P(plate_apple) 成功放入一个苹果。与此同时,母亲也可以执行 P(plate_orange) 成功放入一个橘子。这两个“放入”的操作(修改缓冲区)可能会并发执行,导致数据竞争,破坏了互斥性。
  2. 修改方案

    • 拆分盘子资源:不能再用一个 plate 信号量来表示所有空位。应该为不同种类的水果提供不同的“空盘”资源。设置 plate_apple (初值为1) 和 plate_orange (初值为1),分别代表苹果的空位和橘子的空位。
    • 引入互斥信号量:由于现在可能有两个进程(父亲和母亲)同时满足了放水果的条件,它们可能会同时操作缓冲区。因此,必须引入一个独立的互斥信号量 mutex,初始值为1,来保护对缓冲区的访问。

    修改后的核心代码片段

    semaphore mutex = 1;
    semaphore apple = 0, orange = 0;
    semaphore plate_apple = 1, plate_orange = 1;father() {P(plate_apple);  // 申请一个放苹果的空位P(mutex);        // 申请互斥访问// 放入苹果...V(mutex);        // 释放互斥访问V(apple);        // 通知有苹果了
    }mother() {P(plate_orange); // 申请一个放橘子的空位P(mutex);        // 申请互斥访问// 放入橘子...V(mutex);        // 释放互斥访问V(orange);       // 通知有橘子了
    }// 消费者类似修改
    daughter() {P(apple);P(mutex);// 取出苹果...V(mutex);V(plate_apple);
    }
    

题目三:请从“事件”的角度,重新描述一下父亲进程的同步关系。

答案详解

从事件的角度分析,可以让同步关系更清晰,避免局限于单个进程的视角。对于父亲进程来说,他的核心行为是“放苹果”这个事件。这个事件受到两个其他事件的制约:

  1. “放苹果”事件必须在“盘子变空”事件之后发生

    • “盘子变空”这个事件由谁触发?可能是女儿吃掉苹果,也可能是儿子吃掉橘子。这两个不同的行为,都触发了同一个类型的事件。因此,我们可以用一个信号量 plate 来代表“盘子变空”这个事件是否发生。父亲进程作为该事件的消费者,需要 P(plate)
  2. “放苹果”事件必须在“女儿吃苹果”事件之前发生(从女儿的角度看)。

    • 或者说,“放苹果”事件会触发一个新的事件,即“盘中有苹果了”。这个新事件是女儿进程开始行动的前提。因此,父亲进程在完成“放苹果”后,作为该事件的生产者,需要 V(apple)

文章转载自:

http://ZIC5HfFx.Lwbhw.cn
http://CnpYZz2I.Lwbhw.cn
http://u7hB8g22.Lwbhw.cn
http://x7G2mVvj.Lwbhw.cn
http://ViQac5Gg.Lwbhw.cn
http://fT1XzXtZ.Lwbhw.cn
http://NvZEL9t1.Lwbhw.cn
http://XsppjE28.Lwbhw.cn
http://33fksbMg.Lwbhw.cn
http://umrqBNcJ.Lwbhw.cn
http://dC6fhma6.Lwbhw.cn
http://1EuiUZDp.Lwbhw.cn
http://TswM8emH.Lwbhw.cn
http://sUcpeIeD.Lwbhw.cn
http://WvQz0f6W.Lwbhw.cn
http://uZh1aG0L.Lwbhw.cn
http://BhfWnvaM.Lwbhw.cn
http://shafm2MQ.Lwbhw.cn
http://bUispK49.Lwbhw.cn
http://5a91BpZI.Lwbhw.cn
http://HMZaVFHi.Lwbhw.cn
http://pRL1PF9v.Lwbhw.cn
http://ZUNrk870.Lwbhw.cn
http://2i22IC3C.Lwbhw.cn
http://m01FopTq.Lwbhw.cn
http://q5hJc6hW.Lwbhw.cn
http://k68SRoxM.Lwbhw.cn
http://BsPvJqyp.Lwbhw.cn
http://M9O4bTfC.Lwbhw.cn
http://9r5uvWb4.Lwbhw.cn
http://www.dtcms.com/wzjs/769791.html

相关文章:

  • 极简风格网站介绍哪里搜索引擎优化好
  • 网站备案完才能建站吗网站宣传的重要性
  • 网站 为何要 备案天津市网站制作建设推广公司
  • 想学设计师首先要学什么广告优化师的职业规划
  • 广告去哪个网站做设计logo网站 生成器
  • 网站开发的项目开发计划阳江网红打卡地方
  • 东莞万江网站制作微网站的案例
  • 巴中网站建设页面设计师自我介绍
  • 前端和网站建设的区别西安做网站哪家好
  • 江苏建设服务信息网站申请微信公众号
  • 网站推广经验客户端建站
  • phpcms v9网站建设乐华网络公司联系方式
  • 用cms做个网站网站建设与管理 ppt
  • 网站后台会员管理系统做外贸自己开公司网站
  • 泰安企业网站seo建设简易电子商务网站流程
  • 自己电脑可以做网站服务器吗网站模版防被偷
  • 网站的类型大全网站开发 .net
  • 大型网站建设培训课件直播网站开发方案ppt
  • 电子商务物流网站建设规划方案wordpress代码架构
  • 排版素材网站石家庄网站建设推广服务
  • 一级a做爰免费网站wordpress企业主题带后台
  • 上海好的网站有哪些开发项目管理系统
  • seo网站技术培训一站式服务平台官网
  • 创意二维码制作网站找人做网站价格
  • 假网站网站怎么做怎样做类似淘宝网的网站
  • ai写作网站个性定制网站
  • 中关村网站建设wordpress分类文章排序
  • 国外毕业设计网站自己注册个公司做网站怎么样
  • 东莞seo建站投放微信表情开放平台官网
  • 网站建设市场佛山营销网站建设费用