作業系統 同步與互斥問題

2021-06-21 16:20:05 字數 1845 閱讀 4522

1. 生產者-消費者問題

#define n 100                 //有界緩衝區大小

typedef int semaphore  //定義訊號量

semaphore mutex = 1;  //臨界區互斥訊號量

semaphore empty = n; //空閒緩衝區

semaphore full = 0;       //緩衝區初始化為空

void producer(void)

int item;                        //區域性變數

wile(1){

item = produce_item();  //生產資料

p(empty);                   //獲取空資料槽

p(mutex);                  //獲取進入臨界區的訊號量

insert_item(item);   // 將資料放入緩衝池

v(mutex);                   //釋放互斥量

v(full);                        //資料量加一

void consumer(void)

int item;                      //區域性變數

while(1){

p(full);                    //獲取資料槽

p(mutex);              //獲取進入臨界區的訊號量

item = remove_item();  //將資料從緩衝池讀出

v(mutex);              //釋放互斥量

v(empty);              //資料量減一,即空槽加一

consume_item(item); //消費資料

讀者-寫者問題

typedef int semaphore;    //定義訊號量

semaphore rmutex = 1;   //讀者計數器的互斥量

semaphore wmutex = 1; //寫一寫,讀一寫互斥量

int readcount = 0;             //讀者計數器

void reader(void)              //讀者程序

while(1){

p(rmutex);                //取得讀者計數器的互斥量

readcount = readcount+1;  //進來乙個讀者。讀者數量加一

if(readcount == 1)  p(wnutex);  //如果是第乙個讀者,取得讀一寫互斥量

v(rmutex);              //釋放讀者計數器的互斥量

read_data_base();  //讀資料

p(rmutex);             //讀者讀完資料要離開,先取得讀者計數器的互斥量

readcount = readcount - 1;   //讀者數量減一

if(readcount == 0) v(wmutex);  //如果是最後乙個離開的讀者,釋放讀一寫互斥量

v(rmutex);              //釋放讀者計數器的互斥量

use_dataread();

void writer(void)           //寫者程序

while(1){

think_up_data();   //寫者產生資料

p(wmutex);             //獲得寫一寫,讀一寫操作互斥量

write_data_base();  //寫入資料庫

v(wmutex);                //釋放寫一寫,讀一寫操作互斥量

作業系統 併發 互斥與同步

在多道程式設計系統種,程序會被交替執行,進而在巨集觀上表現出一種併發的外部特徵。為什麼需要併發?假設乙個支援單使用者的單處理器多道程式設計系統,使用者可以從乙個應用程式切換到另乙個應用程式,每個應用程式都使用同一鍵盤輸入,使用同一鍵盤輸出。由於每個程式都需要使用某乙個輸入輸出過程,所以將他視為乙個共...

作業系統實驗 同步互斥

實習1 程序同步 實習要求 在windows 2000 環境下,建立乙個包含n 個執行緒的控制台程序。用這n 個執行緒來表示n 個讀者或寫者。每個執行緒按相應測試資料檔案的要求,進行讀寫操作。請用訊號量機制分別 實現讀者優先和寫者優先的讀者 寫者問題。讀者 寫者問題的讀寫操作限制 1 寫 寫互斥 2...

程序互斥與同步計算機作業系統 作業系統同步互斥大題

作業系統程序同步互斥問題 pv操作加訊號量來實現程序的同步互斥 解題步驟 首先要分析題目中近程的同步關係和互斥關係 同步關係用前v後p實現 互斥關係,一般都是對於乙個緩衝區或者本質上是緩衝區的變數進行訪問,這時候就要用pv操作將對於這個訊號量的訪問夾在中間 解題精髓就這兩句 下面以408 2009年...