ArtOfMP--生产者和消费者问题

2018-07-21

生产者-消费者问题

Alice协议

  • 只要易拉罐是朝上的,她就一直在等待,直到易拉罐被Bob改为朝下;
  • 此时易拉罐是朝下的,她将宠物放倒院子里去吃饭;
  • 当宠物回来时,Alice检测宠物们是不是已经吃光了:如果已经吃光了,则Alice就把易拉罐改为朝上;

Bob的协议

  • 只要易拉罐是朝下的,Bob就会一直等待,直到易拉罐被Alice改成朝上;
  • 此时,易拉罐是朝上的,Bob将食物放进院子里;
  • Bob拉动绳子,把易拉罐改为朝下;

性质:

  • 互斥性:Bob和宠物永远不会同时在院子里;

    基于状态机进行证明:把带有绳子的易拉罐看做一个状态机。这个易拉罐有两个状态:朝上和朝下,且在两者之间重复切换。

    证明步骤:首先证明初始时,互斥性成立;然后证明,从任意一种状态切换到另一种状态,互斥性仍然成立。

    证明:首先,初始时假设易拉罐是朝下的,根据Alice和Bob的约定协议:Bob会一直在等待易拉罐被Alice修改为朝上;Alice会放宠物到院子里吃饭,此时互斥性显然成立。

    然后,当易拉罐从朝下状态切换为朝上时,即需要Alice修改易拉罐为向上。根据Alice的协议,宠物已经回来且吃光了院子里的食物,即宠物已经不在院子里了;根据Bob的协议,当易拉罐为朝上时,Bob要进入院子里添加食物,互斥性成立。

    初始时易拉罐是朝上的,然后被Bob改为向下的情况可以类似的分析。

  • 无饿死:如果Bob一直愿意喂养宠物,且宠物总会饿,则宠物就会经常有饭吃。

    反证法:假设存在饿死现象,即院子里没有食物,宠物很饿,Bob一直在尝试进入院子,但不成功。

    则此时易拉罐肯定是朝下的,否则Bob就可以进入院子添加食物了。然后,Alice就会放宠物到院子里吃饭,等宠物回来后,Alice发现宠物吃光了食物,就将易拉罐修改为朝上。根据Bob的协议,此时Bob就可以成功进入院子了,与假设矛盾。

  • 生产者-消费者:宠物不会进入院子除非院子里有食物,Bob不会提供食物除非食物被吃光了;

    根据互斥性,宠物和Bob不会同时在院子里。

    Bob不会进入院子,除非Alice将易拉罐修改为朝上。根据Alice的协议,此时宠物们已经回来且Alice发现院子里的食物已经空了,即Bob不会进入院子除非食物被吃光了。

    宠物不会进入院子,除非Bob把易拉罐修改为朝下。根据Bob的协议,此时Bob已经往院子里添加好食物了,即宠物不会进入院子,除非院子里有食物。

你可能感兴趣的:(ArtOfMP--生产者和消费者问题)