程序同步控制

2021-10-10 14:03:51 字數 1271 閱讀 6715

生產者-消費者問題描述的是:有一群生產者程序在生產產品,並將這些產品提供給消費者程序去消費。為使生產者程序與消費者程序能夠併發執行,在兩者之間設定了乙個具有n個緩衝區的緩衝池,生產者程序將它所生產的產品放入乙個緩衝區中;消費者程序可以從乙個緩衝區中取走產品去消費。儘管所有的生產者和消費者程序都是以非同步方式執行的,但它們之間必須保持同步,即不允許消費者程序到乙個空緩衝區去取產品;也不允許生產者程序向乙個已經裝滿產品的緩衝區中投放產品。

這是乙個同步與互斥共存的問題。

生產者—消費者問題是乙個同步問題。即生產者和消費者之間滿足如下條件:

(1) 消費者想接收資料時,有界緩衝區中至少有乙個單元是滿的。

(2) 生產者想傳送資料時,有界緩衝區中至少有乙個單元是空的。

故設定兩個訊號量:

(1) empty:說明空緩衝區的數目,初值為有界緩衝區的大小n。

(2) full:說明已用緩衝區的數目,初值為0。

由於有界緩衝區是臨界資源,因此,各生產者程序和各消費者程序之間必須互斥執行。故設定乙個互斥訊號量mutex,其初值為1。

#include #include #include #include #include using namespace std;

const int limit = 30; //生產總量

const int maxsize = 10; //緩衝區大小

const int kind = 7;

int bufidx = 0; //當前緩衝區下標

string buf[maxsize]; //緩衝區 (字串)

string product =;

handle mutex,full,empty;

handle disp;

//生產者子過程

dword winapi producer(lpvoid param)

cout << "consumer quit!" << endl << endl;

return 0;

}//消費者子過程

dword winapi consumer(lpvoid param)

cout <<"consumer quit!"<< endl;

return 0;

}int main()

//等待直到消費者執行緒執行完成

if (consumerhandle != null)

system("pause");

}

程序控制與程序同步(筆記)

程序控制 1.程序的建立 1 乙個程序建立另一程序的事件 原因 使用者登入 分時情況下使用者的請求 作業排程 批處理中 提供服務 執行中的使用者程式提出功能請求,要建立服務程序 如列印服務 應用請求 應用程式自己建立程序,完成特定功能的新程序。木馬程式 2 建立過程 1 申請空白pcb 2 為新程序...

程序同步(一) 程序同步相關概念

在os中引入程序後,雖然提高了資源的利用率和系統吞吐量,但是由於程序的非同步性將會給系統造成混亂,尤其是他們在爭搶臨界資源時。當多個程序去爭用共享變數 鍊錶時,可能導致資料處理出錯。程序同步的任務就是對多個相關程序在執行次序上進行協調,使得併發執行的程序之間能有效地共享資源和相互合作,從而使程式的執...

Linux程序同步

linux程序同步 概述 程序間通訊 ipc 方法主要有以下幾種 管道 fifo 共享記憶體 訊息佇列 訊號量 1.管道中還有命名管道和非命名管道 即匿名管道 之分,非命名管道 即匿名管道 只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式 2.訊息佇列是...