回覆列表
  • 1 # 使用者8852944140293

    桌上有一空盤,允許存放一隻水果。爸爸可向盤中放蘋果,也可向盤中放桔子,兒子專等吃盤中的桔子,女兒專等吃盤中的蘋果。規定當盤空時一次只能放一隻水果供吃者取用,請用P、V原語實現爸爸、兒子、女兒三個併發程序的同步。

    分析 在本題中,爸爸、兒子、女兒共用一個盤子,盤中一次只能放一個水果。當盤子為空時,爸爸可將一個水果放入果盤中。若放入果盤中的是桔子,則允許兒子吃,女兒必須等待;若放入果盤中的是蘋果,則允許女兒吃,兒子必須等待。本題實際上是生產者-消費者問題的一種變形。這裡,生產者放入緩衝區的產品有兩類,消費者也有兩類,每類消費者只消費其中固定的一類產品。

    解:在本題中,應設定三個訊號量S、So、Sa,訊號量S表示盤子是否為空,其初值為l;訊號量So表示盤中是否有桔子,其初值為0;訊號量Sa表示盤中是否有蘋果,其初值為0。同步描述如下:

    int S=1;

    int Sa=0;

    int So=0;

    main()

    {

    cobegin

    father(); /*父親程序*/

    son(); /*兒子程序*/

    daughter(); /*女兒程序*/

    coend

    father()

    {

    while(1)

    {

    P(S);

    將水果放入盤中;

    if(放入的是桔子)V(So);

    else V(Sa);

    }

    }

    son()

    {

    while(1)

    {

    P(So);

    從盤中取出桔子;

    V(S);

    吃桔子;

    }

    daughter()

    {

    while(1)

    {

    P(Sa);

    從盤中取出蘋果;

    V(S);

    吃蘋果;

  • 中秋節和大豐收的關聯?
  • 甘家口商場到西直門路線?