过程同步Coffe Shop员工和客户算法

时间:2016-05-21 12:49:26

标签: c multithreading algorithm synchronization multiprocessing

我正在用C编写一个程序,允许只有一名员工的Coffe Shop为多个客户提供服务。为此,我做了两个流程,(1)客户流程和(2)员工流程。

我的问题是,

  1. 这个算法会给我正确的同步而不会出现死锁 或饥饿或任何其他同步问题?
  2. 是否有必要保护共享变量,如果是,如何?
  3. 更多详情:当客户到达时,他等待员工免费,然后客户说你好,然后员工说你好。员工在等待他/她决定要获得什么之前等待客户。在做出决定后,员工为客户服务,然后他们每个人都做他们想做的事。

    我使用了3个信号量

    sem customer = 0;         // Number of customers in the shop
    sem readyToTakeOrder = 1; // Employee is free and ready to take order 
    sem endOrder = 1;         // Customer finished giving his order
    

    我的客户算法如下,

    void customer(){
        customer.signal();
        readyToTakeOrder.wait();
        print("I want a coffee");
        endOrder.signal();
        leave();          // leave the shop
    }
    

    员工算法,

    void employee(){
        customer.wait();
        print("How can I help you");
        readyToTakeOrder.signal();
        endOrder.wait();
        serveCoffee();    // make customer's coffee
        leave();          // end serving this customer
    }
    

0 个答案:

没有答案