程序間的同步(作業系統)

2021-07-22 15:44:03 字數 1147 閱讀 7615

乙個資料檔案或記錄,可被多個程序共享,我們把只要求讀該檔案的程序稱為「reader程序」,其他程序則稱為「writer 程序」。

1.允許多個程序同時讀乙個共享物件,因為讀操作不會使資料檔案混亂。

2.但不允許乙個 writer 程序和其他 reader 程序或 writer 程序同時訪問共享物件,因為這種訪問將會引起混亂。

一。如果只有乙個讀者和乙個寫者我們很容易寫下**

void reader()

}void writer()

} 二。如果有多個讀者,和乙個寫者,當讀者占有共享區時怎麼判斷下乙個想要使用共享區的是讀者呢?使用計數,當計數不為0時,表示當前是讀者。新來的讀者就可以直接讀了。

void reader()

} void writer()

} 簡單的同步問題:

描述:如何實現兩個程序乙個控制完共享區,另乙個接著控制,交換進行,可以規定哪個在前哪個在後

mutex=1;

empty=1;

full=0;

void father()

}void son()

如何實現生產者消費者問題:

semapthore mutex=1;

semapthore empty=10;

semapthore full=0;

void produce()

}void consum()

} 桌上有乙隻盤子,允許存放乙個水果,父親專向盤中放蘋果,母親專向盤中放桔子,兒子專等吃盤裡的桔子,女兒專等吃盤裡的蘋果。只要盤子空,則父親或母親可向盤中放水果,僅當盤中有自己需要的水果時,兒子或女兒可從中取出。 1

父親、母親要互斥使用盤子,所以兩者之間是互斥關係; 2

父親放的蘋果,女兒吃,所以兩者是同步關係; 3

母親放的桔子,兒子吃,所以兩者也是同步關係。

semaphore 

s_plate

=1,

=0,

s_orange

=0;

void  father( ) // 父親程序

} void  mother( ) // 母親程序

} void  son( )  // 兒子程序

} void  daughter( )  // 女子程序

}

作業系統之程序間通訊 執行緒同步

程序間通訊,指的是程序之間資訊交換,所交換的資訊量少則是乙個狀態或樹枝,多則成千上萬個位元組。每個程序中訪問 臨界資源 的那段程式稱為 臨界區 臨界資源 是一次僅允許乙個程序使用的共享資源 共分為4種 1 共享記憶體 共享記憶體就是對映一段能被其他程序所訪問的記憶體。這段記憶體由乙個程序建立,但多個...

作業系統 程序間通訊

程序間通訊涉及到3個問題 1.乙個程序如何把資訊傳遞給另乙個程序 2.確保兩個或多個程序之間不會在關鍵活動中出現交叉 3.程序間執行的順序對執行結果的影響。注意 確保程序對臨界區的 互斥 訪問。忙等待的互斥 1.遮蔽中斷 當乙個程序進入臨界區後立即遮蔽所有中斷,時鐘中斷也被遮蔽 這樣cpu就不會進行...

作業系統 程序間通訊

include include include include include include ifndef semun h 條件編譯,即若semun在標頭檔案中沒有被定義,就進行下面的編譯 define semun h union semun endif static int set semval...