Colmo洗碗机:寻找“洗碗机在工作”的解决方案

关于Colmo洗碗机的问题,在stack of dishes中经常遇到, 我正在寻找一种适用于“工作中的洗碗机”问题的算法。

我正在寻找一种适用于“工作中的洗碗机”问题的算法。

虽然能够在其中放入脏咖啡杯等是很棒的,但您很快就会遇到“菜肴的状态是什么?”困境。如果您走到厨房,可以从洗碗机中取出餐具,因为它们是干净的,只是没有放好?您可以在洗碗机中放入脏盘子,还是会使其中的干净盘子无效?

这似乎是一个必须有一个编程等效的问题。你有一个异步触发的共享进程,并将对象从一个状态移动到另一个状态。您需要能够在任何给定时间知道对象的状态。可以应用哪些算

我的开始选项是在洗碗机上创建一个“干净”和“脏”的翻转标志。当洗碗机清空时,它必须切换到“脏”,当它运行时,它必须切换到“干净”。该算法有问题吗?

注意:没有使用轮询计划的算法,请...

6

User线程要将脏的Dish放入其他清洁的洗碗机中时,问题中的主要问题就会发生。

解决方案很简单,创建另一个Dishwasher对象。

一个Dishwasher拿着脏盘子,等待清洗,另一个拿着最近清洗过的盘子。

Dishwasher拿着的干净碗碟是空的时,开始清洁其他Dishwasher中的脏碗碟。

在这一点上,User线程现在可以把脏盘子放在曾经是干净的Dishwasher(现在是空的)。

继续无限期地交替两个Dishwashers的角色。User线程总是可以放下一个脏盘子,而不需要KitchenCounterBuffer

注意:此解决方案不能解决杯饥饿问题。User线程仍可能阻塞等待洗碗机完成清洁。

注意 2:在Dishwasher是单例的受限环境中,提供一个KitchenCounterBuffer以及一个DishwasherOperator来收起碗碟并将脏碗碟从KitchenCounterBuffer放置到Dishwasher

2

与编程无关,但可能有助于回答您的逻辑问题...我的洗碗机在运行洗衣机时会亮起“清洁”灯。如果您只是短时间打开门(即取出干净的杯子),则该灯将保持点亮状态,但是如果您将门保持较长时间(有足够的时间清空洗衣机),则该灯将熄灭。它并不完美,但它比前面的旗帜要可靠得多。必须由一个人翻转(有点健忘)。

1

我假设洗碗机中的所有物体都必须干净或肮脏,但不能混合和匹配。的解决方案强制执行该属性。如果不是,你的类比不太正确。

只是几个互斥体应该做的伎俩。

你有四个州。

洗碗机空了,你可以把脏盘子

洗碗机脏了,你可以把脏盘子

洗碗机运行,你不能把脏盘子或删除干净的。

洗碗机干净,你不能把脏盘子,可以删除干净的。

你可以进一步崩溃空和脏在一起,因为你不关心的差异。

当你想插入的东西,你等待 DirtyMutex

当你想开始洗涤时,你在 DirtyMutex 上等待,这样你就不会浪费水;)

当洗涤结束时,你的信号 CleanMutex

当您要清空洗碗机时,请等待 CleanMutex

当洗碗机是空的,你的信号 DirtyMutex

这假设你可以知道洗碗机是空的,如果不是,你需要一个计数信号量 ElementsInDishwasher,你等待信号 DirtyMutex 之前。

1

我喜欢你的类比,但潜在的问题让我担心。根据我的经验,一个设计良好的系统总是知道 (通常是隐式地) 你所指的那种状态。例如,共享资源队列中的资源可供其他进程使用--如果不是,它就不会在队列中。或者,由工作线程修改的资源处于线程的处理说它处于的任何状态 b / '' '' '' '' '' '' '' '' ''

有一个令人难以置信的有效设计模式,我还没有遇到(或发明:-),但你所描述的有设计气味(或肮脏的菜肴)的暗示,而不是一个有效的模式。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(461)
Python中指数怎么表示:Python中指数函数的集成
上一篇
如何上传本地文件到云服务器:无法在GoogleColab中上传本地文件
下一篇

相关推荐

  • cvt和自动挡哪个好提升驾驶体验的最佳选择

    CVT(可变转换器)是一种由传动带及传动轮组成的无级变速器,它可以在没有传动档位的情况下,根据驾驶者的驾驶习惯,自动调整传动轮之间的转速比,从而实现无级变速。自动挡是指车辆自动变速箱,它使用液力传动来实现变速,可以自动适应车辆的行驶状态,减少司机的疲劳,提高行车的舒适性。…

    2023-06-08 07:42:19
    0 34 67
  • cv一叶扁舟和清影轩阳:漫游在一叶扁舟和清影轩阳之间

    cv一叶扁舟是一款开源的计算机视觉库,用于图像处理、计算机视觉等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。清影轩阳是一款开源的计算机视觉框架,用于图像处理、目标检测、分类等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。…

    2023-08-05 07:06:20
    0 87 87
  • css设置滚动条宽度设置:This is a title

    CSS设置滚动条宽度的方法:使用CSS3的。-webkit-属性:…

    2023-06-06 10:53:01
    0 52 63
  • xl和xe汽车cvt:探索XL和XE汽车的CVT技术优势

    XL和XE汽车CVT是一种变速器,它使用液力变矩器代替传统的机械变速器,以达到更高的效率。它的工作原理是,当发动机输出功率时,液力变矩器就会将这些功率转换为液压能量,然后将能量传递到变速器的输出轴上,从而实现变速。…

    2023-04-09 00:41:04
    0 53 84
  • cordon bleu是什么意思:法式炸鸡卷——Cordon Bleu的经典之作

    Cordon Bleu是一种烹饪技术,其中肉片被置于奶酪和火腿之间,然后用面包屑裹上,最后煎炸或烤熟。这种技术通常用于制作鸡肉,但也可以用于制作其他类型的肉类,如牛肉或猪肉。…

    2024-01-27 15:13:30
    0 48 21
  • countif 非空:非空单元格的计数

    Countif 非空是指计算某个单元格不为空的数量。代码如下:…

    2023-04-22 15:54:15
    0 97 51
  • java double保留一位小数:How to Round a Double to One Decimal Place in

    示例示例使用类可以轻松实现java double保留一位小数的功能,具体代码如下:// 创建对象…

    2023-05-14 07:40:03
    0 45 42
  • linux如何写c语言一个完整的指南

    示例示例在Linux系统中,可以使用C语言编写源代码文件,然后使用GCC编译器来编译源代码文件,生成可执行文件。下面是一个简单的C语言代码示例:…

    2023-05-16 02:02:45
    0 62 61

发表评论

登录 后才能评论

评论列表(35条)