DANCE WITH JAVA

          開發(fā)出高質(zhì)量的系統(tǒng)

          常用鏈接

          統(tǒng)計

          積分與排名

          好友之家

          最新評論

          互斥

          互斥的幾種實現(xiàn)方式:
          一,忙等待互斥
          1,禁止中斷
          2,鎖變量
          3,嚴(yán)格的輪換
          4,peterson算法
          5,Tsl
          忙等待存在著各種各樣的問題,一個最大的問題使消耗cpu,另外容器產(chǎn)生各種錯誤。而且還可能出現(xiàn)優(yōu)先級反轉(zhuǎn)問題,所以忙等待并不是很好的辦法

          ?互斥2-生產(chǎn)者消費者(原始狀態(tài))

          一,休眠與喚醒
          1,經(jīng)典的生產(chǎn)者與消費者問題
          生產(chǎn)者消費者現(xiàn)象的原型是這樣的:
          一個生產(chǎn)者生產(chǎn),當(dāng)緩沖區(qū)滿了,就自己休眠
          一個消費者消費,當(dāng)緩沖區(qū)空了,就自己休眠

          一個生產(chǎn)者生產(chǎn),當(dāng)生產(chǎn)一個產(chǎn)品時,就喚醒消費者(可以消費了)
          一個消費者消費,當(dāng)消費一個產(chǎn)品時,就喚醒生產(chǎn)者(可以生產(chǎn)了)

          無論是生產(chǎn)者,還是消費著,當(dāng)被喚醒的時候不一定馬上執(zhí)行,還需要獲得cpu

          ◎這種設(shè)計產(chǎn)生了一個問題,原因是需要一個count來記錄產(chǎn)品個數(shù),而count的獲得并沒有互斥
          例如如下情況:
          消費者取得count=0,但是還沒來得及休眠自己的時候,發(fā)生了系統(tǒng)進(jìn)程調(diào)度,切換到生產(chǎn)者
          生產(chǎn)者生產(chǎn)了一個產(chǎn)品后,喚醒消費者,但是這個時候的消費者并沒有休眠,所以喚醒丟失
          然后生產(chǎn)者繼續(xù)生產(chǎn),直到緩沖滿了,自動休眠。
          但是這個時候的消費者也是休眠狀態(tài),沒有人來喚醒他,所以兩個都一直休眠下去。

          解決方案:
          提供一個標(biāo)志位,當(dāng)生產(chǎn)者發(fā)送喚醒給消費者的時候,記錄下來為1,當(dāng)消費者要休眠之前檢查一下這個標(biāo)志位,如果是1就不休眠,如果不是就休眠
          這個方法暫時解決了問題,考慮一下。
          如果是m個生產(chǎn)者,n個消費者,m,n又很大的情況下,標(biāo)志位就太多了。
          這種情況下情況下地解決辦法見下一篇文章 <互斥3-生產(chǎn)者消費者>

          這個方案地實現(xiàn)程序如下:
          #define N=100
          int count=0;
          void product(void){
          ?int item;
          ?while(TRUE){
          ??item=produce_item()
          ??if(count==N)sleep();
          ??insert_item(item);
          ??count=count+1;
          ??if (count==1)wakeup(consumer);
          ?}
          }
          void consumer(void){
          ?int item;
          ?while(TRUE){
          ??if(count==0)sleep();
          ??item=remove_item();
          ??count=count-1;
          ??if(count==N-1)wakeup(product);
          ??consume_item(item);
          ?}
          }?


          posted on 2006-09-20 21:32 dreamstone 閱讀(529) 評論(0)  編輯  收藏 所屬分類: 基礎(chǔ)

          主站蜘蛛池模板: 新河县| 中江县| 无为县| 巢湖市| 长春市| 苏尼特右旗| 名山县| 珲春市| 宣武区| 安徽省| 敦煌市| 木兰县| 通山县| 丰顺县| 新化县| 彭阳县| 河西区| 娱乐| 米林县| 鄂州市| 鄂托克前旗| 榆树市| 安西县| 浮梁县| 武强县| 丁青县| 泗水县| 奉节县| 商水县| 鄢陵县| 北辰区| 金沙县| 阜阳市| 礼泉县| 枞阳县| 泸溪县| 同仁县| 丰台区| 哈尔滨市| 射阳县| 涡阳县|