程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 經典操作系統問題——讀寫者問題(讀者優先)

經典操作系統問題——讀寫者問題(讀者優先)

編輯:關於C語言

問題:

一些讀者和一些寫者對同一個黑板進行讀寫。多個讀者可同時讀黑板,但一個時刻只能有一個寫者,讀者寫者不能同時使用黑板。對使用黑板優先級的不同規定使讀者-寫者問題又可分為幾類。第一類問題規定讀者優先級較高,僅當無讀者時允許寫者使用黑板。


P,V原語實現:

進程:  writer-寫者進程     reader-讀者進程

定義變量:

  mutex=1;    //黑板資源

  reader_mutex=1; //控制讀者間的互斥

  r_count=0;  //統計讀者人數


//reader - 讀者進程
{
     while(true)
     {
        p(reader_mutex);   //控制讀者的互斥,防止出現兩個讀者同時執行reader_count++,而reader_count只加1;
        reader_count++;    //要使用黑板的讀者人數加1;
        if(reader_count==1)
            p(mutex);      //如果是第一個讀者,就要申請黑板;
            v(reader_mutex);  //釋放變量,讓下一個讀者可以進來讀黑板;
            read();        //進行讀黑板操作;
            p(reader_mutex);
            reader_count--; //讀者讀完黑板後,讀者人數要減1,同樣也要考慮互斥的情況;
            if(reader_count==0)
            v(mutex);        //如果是最後一個讀者,就要釋放黑板資源;
            v(reader_mutex);
}



//writer - 寫者進程
{
   while(true)
   {
       p(mutex);     //申請黑板資源;
       write();      //進行寫操作;
       v(mutex);     //釋放黑板資源;
   }
}





本文出自 “技術在於堅持” 博客,請務必保留此出處http://minilinux.blog.51cto.com/4499123/1275337

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved