計算機操作系統生產者和消費者模型的簡單介紹

同步互斥小口訣

  • 畫圖理解題目
  • 判斷題目類型
  • 分析進程數目 填寫進程模板
  • 補充基本代碼(偽代碼)
  • 補充PV代碼
  • 檢查調整代碼

注意事項

  • 代碼是一步一步寫出來的,代碼是反復調整寫出來的
  • 60%是生產者和消費者模型
  • 30%是讀者和寫者的模型

生產者和消費者

例子1

  • 媽媽每次放放一個蘋果到桌子上,孩子每次從桌子上取一個蘋果。取蘋果和放蘋果不可以同時進行,而且桌子上最多只能放10個蘋果,請使用pv代碼實現同步互斥
  • 箭頭 代表生產的含義,數目代表生產的數量

  • 特征:1,存在一個容器,具有容量的限制;2,具有生產行為和消費行為,生產行為增加容量,消費行為減少容量
  • 分析:生產者:需要考慮容器的容量,考慮的是剩余空間;消費者:需要考慮已占用空間
  • 進程的數目:母親 和 孩子兩個進程
  • 補充基本代碼? 取一個蘋果 和 放一個蘋果
  • 補充PV代碼 full代表占用空間;empty代表已經占用的空間;p代表減;v代表加
  • 使用P(s)和V(s)包住會改變容器容量的代碼,也就是臨界資源
  • 代碼
semaphore full = 0;  //表示資源
semaphore empty = 10;//表示資源
semaphore s = 1;     //表示互斥
孩子(){while(1){p(full);//是否有已占用空間,有則減少已占用空間,無則等待p(s);取一個蘋果;v(s);v(empty);//增加剩余空間}
}媽媽(){while (1){p(empty);//是否有剩余空間,有則減少剩余空間,無則等待p(s);放一個蘋果;v(s);v(full);//增加已占用空間}}

例子2

  • 桌子上有一個盤子,每次只能放入一個水果,媽媽放入橘子,爸爸放入蘋果,兒子吃橘子,女兒吃蘋果。盤子為空,爸爸媽媽才可以放入水果,當盤子的水果和兒子或者女兒匹配的時候,兒子和女兒才可以拿水果
  • 消費者(兒子) 關注橘子;消費者(女兒)關注蘋果;生產者(媽媽)關注盤子空間;生產者(爸爸)關注盤子空間
  • 四個進程?

  • mutex 和 plate的效果是等價的,因此,這里不加mutex也是可以的
  • 代碼
semaphore orange = 0;  
semaphore apple = 0;
semaphore plate = 1;
semaphore mutex = 1;
媽媽(){while(1){p(plate);p(mutex);放橘子;v(mutex);v(orange);}
}爸爸(){while (1){p(plate);p(mutex);放蘋果;v(mutex);v(apple);}}兒子(){while (1){p(orange);p(mutex);吃橘子;v(mutex);v(plate);}}女兒(){while (1){p(apple);p(mutex);吃蘋果;v(mutex);v(plate);}}

?例子3?

  • AB兩個人通過信箱進行辯論,每個人都從自己的信箱取出對方的問題,將答案和新的問題組成一個郵件放入對方的信箱中,假設A的信箱可以裝入M個郵件,B的信箱可以裝入N個郵件,初始的時候,A信箱有X封郵件,B信箱有y封郵件,辯論者每次只取一封郵件,請使用PV操作實現,并解釋信號量初值和含義
  • 分析
  • 生產者 A? 關注 B的郵箱剩余空間
  • 生產者 B 關注 A的郵箱剩余空間
  • 消費者 A?關注 A的郵箱有多少封信件
  • 消費者 B 關注 B的郵箱有多少封信件

  • 代碼
semaphore mutex_A = 1;  
semaphore mutex_B = 1;  
semaphore full_A = x;
semaphore empty_A = M - x;
semaphore full_B = y;
semaphore empty_B = N - y;
A(){while(1){p(full_A);p(mutex_A);從A的郵箱抽取信件;v(mutex_A);v(empty_A);p(empty_B);p(mutex_B);向B的郵箱投遞信件;v(mutex_B);v(full_B);}
}B(){while (1){p(full_B);p(mutex_B);從B的郵箱抽取信件;v(mutex_B);v(empty_B);p(empty_A);p(mutex_A);向A的郵箱投遞信件;p(mutex_A);p(full_A);}}

例子4

  • 系統中有多個生產者和消費者,共享一個能存放1000件產品的環形緩沖區(初始為空)。當緩沖區沒有滿的時候,生產者可以放入生產的一個產品,否則等待,當緩沖區域不為空的時候,消費者進程可以取走一件商品,否則等待。要求一個消費者從緩沖區域連續取走10個產品之后,其他消費者才可以取走產品,請使用PV實現該流程并解釋信號量的含義
  • 生產者 j 剩余空間
  • 消費者 i 剩余空間
  • 消費者 m 物件數量
  • 消費者 n? 物件數量
  • 代碼
semaphore empty = 1000;  
semaphore full = 0;  
semaphore mutex = 1;
semaphore mutex_2 = 1;
生產者i(){while(1){p(empty);p(mutex);放一件物品;v(mutex);v(full);}
}生產者j(){while(1){p(empty);p(mutex);放一件物品;v(mutex);v(full);}
}消費者m(){while (1){p(mutex_2);for(int i = 0;i < 10;i++){p(full);p(mitex);取一件物品;v(mutex);v(empty);}v(mutex_2);}}消費者n(){while (1){p(mutex_2);for(int i = 0;i < 10;i++){p(full);p(mitex);取一件物品;v(mutex);v(empty);}v(mutex_2);}}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446762.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446762.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446762.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android Glide圖片加載框架(二)源碼解析之load()

文章目錄一、前言二、源碼分析1、load()Android Glide圖片加載框架系列文章 Android Glide圖片加載框架&#xff08;一&#xff09;基本用法 Android Glide圖片加載框架&#xff08;二&#xff09;源碼解析之with() Android Glide圖片加載框架&#xff08;二&#xff09;源碼…

codeforces 231A-C語言解題報告

231A題目網址 題目解析 1.輸入比賽的題目,每一道題3個人的解題狀況(0或1),輸出總的解答題目(每一個題至少有2個,記1次) 2.在for循環中去錄入每道題的解答狀況 3.因為有題目解答的計算,所以直接用原始的解答狀況去計算 if(result[0]result[1]result[2]3) { count; } 知識點 …

英語一段落排序題技巧

總述 1.做此題不用通篇理解,找第一句和最后一句,理清楚里面的邏輯即可 首段 1.使用特殊疑問句提出問題,符合首段特點 連貫詞 1.in one case…in another case 兩個段落連在一起 2.some…others 隱式:most sites等同于others 邏輯 1.總分關系 調查–地面調查

計算機操作系統讀者和寫者模型的簡單介紹以及思考

讀者和寫者 讀寫兩組進程&#xff0c;共享一個文件&#xff0c;多個讀者可以同時訪問文件&#xff0c;多個寫者不可以同時訪問文件&#xff0c;寫者和讀者也不可以同時訪問文件共享讀&#xff1b;獨占寫特征:1,資源被誰占有&#xff1b;2&#xff0c;寫者改變資源&#xff0c;…

Android Glide圖片加載框架(二)源碼解析之into()

文章目錄一、前言二、源碼解析1、into(ImageView)2、GlideContext.buildImageViewTarget()3、RequestBuilder.into(Target,RequestListener,RequestOptions);4、RequestBuilder.buildRequest()5、SingleRequest.obtain()6、isEquivalentTo()、isSkipMemoryCacheWithCompletePre…

codeforces 158A-C語言解題報告

158A題目網址 題目解析 1.輸入n個選手,和第k個參考選手 再輸入每一個選手的比賽成績 2.輸出比賽成績>第k個選手的入選人數 3.n,k都是從1開始計算的 4.因為要比較所有的選手與第k個選手,所以使用數組,而且要使用兩個循環(第一個輸入數據,第二個比較成績) 5.不要忘記scanf都…

通過字符串的方式讀取文件的內容

代碼 std::ifstream file("1.txt");std::stringstream data;data << file.rdbuf();printf(data.str().c_str());file.close(); 頭文件 #include <cstdio> #include <cstdlib> #include <fstream> #include <sstream>

2014年考研英語一翻譯知識點

題目講解網址 總結 1.做翻譯題,不用看句子前后的地方,直接看要翻譯的部分 2.多根據語境去翻譯 3.如果是不認識的單詞,一般都是我們平常經常使用/說的詞的代替高級詞 題目句子 It is also the reason why when we try to describe music with words, all wecan do is articul…

Android Glide圖片加載框架(三)緩存機制

文章目錄一、緩存簡介二、緩存用法內存緩存方式磁盤緩存方式三、緩存KEY四、內存緩存內存緩存流程五、磁盤緩存磁盤緩存流程Android Glide圖片加載框架系列文章 Android Glide圖片加載框架&#xff08;一&#xff09;基本用法 Android Glide圖片加載框架&#xff08;二&#…

計算機操作系統 死鎖問題

概念 條件是基礎&#xff0c;在一定的原因下&#xff0c;產生結果死鎖三胞胎 死鎖 僵持&#xff0c;消耗時間&#xff0c;雙方都占用了部分資源&#xff0c;不釋放活鎖 雙方互相謙讓&#xff0c;都不占用資源饑餓 謙讓的一方一直等待&#xff0c;無法占有資源&#xff0c;導致…

C++ 力扣劍指Offer16-數值的整數次方

題目詳情 /* * 實現函數double Power(double base, int exponent)&#xff0c; * 求base的exponent次方。不得使用庫函數&#xff0c;同時不需要考慮大數問題。示例 1: 輸入: 2.00000, 10 輸出: 1024.00000示例 2: 輸入: 2.10000, 3 輸出: 9.26100 * 示例 3: 輸入: 2.00000, -…

Android Glide圖片加載框架(四)回調與監聽

文章目錄Android Glide圖片加載框架系列文章 Android Glide圖片加載框架&#xff08;一&#xff09;基本用法 Android Glide圖片加載框架&#xff08;二&#xff09;源碼解析之with() Android Glide圖片加載框架&#xff08;二&#xff09;源碼解析之load() Android Glide圖…

算法章節 數組、鏈表、棧、隊列

數組 概念與特性 1&#xff0c;數組是線性表&#xff0c;用一組連續的內存空間存儲?組具有相同類型的數據 2&#xff0c;最大的特性是?持按照下標O(1)時間復雜度內快速訪問數組元素 3&#xff0c;?維數組尋址公式&#xff1a;a[i]_addr base_addr i * data_type_size 操作…

武忠祥.高等數學.基礎課-第一章函數 極限 連續P10

sin(1/x) 詳細解析網址 1.圖像 2.極限 x–>0時,函數極限不存在 sin2x 詳細作圖網址 1.圖像 2.周期為Π f(x)周期為T,f(axb)周期為T/|a| 所以sinx周期為2Π,sin2x周期為2Π/2Π |sinx| 詳細講解網址 1.圖像 2.周期:Π 3.絕對值 &#xff08;1&#xff09;y|sinx|的圖…

Java命令:jstat — 查看JVM的GC信息

文章目錄一、簡介二、常用命令1、jstat -class pid : class loader行為統計2、jstat -compiler pid : JIT編譯器行為統計3、jstat -gc pid 5000 20 : 垃圾回收堆行為統計4、jstat -gccapacity pid 5000 20 : 堆內存統計5、jstat -gcutil pid 5000 20 : 總結垃圾回收統計6、jsta…

算法章節 遞歸、排序、?分查找

遞歸 概念與特性函數調?函數?身的編程?式叫做遞歸&#xff0c;調?為”遞“&#xff0c;返回為”歸“三個條件1. ?個問題的解可以分解為多個?問題的解&#xff1b; 2. 分解之后的?問題&#xff0c;除了數據規模不同&#xff0c;求解思路跟原問題相同&#xff1b; 3. 存在…

codeforces 50A-C語言解題報告

50A題目網址 解題報告-others 題目解析 1.輸入n x m大小的木板,使用21大小的多米諾去填滿,求最多的多米諾數目 2.通過分析把木板分為奇數和偶數的情況 1)有一邊是偶數的情況: 使用2去填滿 2)兩個邊都是奇數 奇數-1偶數 還是讓木板的(奇數-1)邊去和2平行,再加上 (m-1)/2(n/1)…

Java命令:jps — 查看進程信息

文章目錄一、簡介二、常用命令1、jps2、jps -l3、jps -q4、jps -m5、jps -v6、jps失效一、簡介 JVM Process Status Tool&#xff0c;顯示指定系統內所有的HotSpot虛擬機進程。 功能&#xff1a; 顯示當前所有java進程pid的命令&#xff0c;我們可以通過這個命令來查看到底啟…

操作系統概述 記錄操作系統相關知識

操作系統 現代計算機系統由一個或多個處理器、主存、打印機、鍵盤、鼠標、顯示器、網絡接口以及各種輸入/輸出設備構成。上面提到的這些東西都屬于硬件資源&#xff0c;用戶不會直接和硬件進行交互&#xff0c;計算機安裝了一層軟件&#xff0c;這層軟件能夠通過響應用戶輸入的…

2014年英語一作文partA

作文講解網址 題目 Write a letter of about 100 words to the president of your university, suggesting how to improve students’ physical condition. You should include the details you think necessary. You should write neatly on the ANSWER SHEET. Do not sign…