作業系統的程序同步演算法 記錄型訊號量模擬

2021-08-20 12:54:20 字數 1497 閱讀 4370

記錄型訊號量程序同步機制擁有記錄型的資料結構,其中包括某種臨界資源的可供訪問的數量和程序阻塞佇列,程序在操作時只能採用wait()和signal(),兩種原子操作。其演算法模擬如下:

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

//訊號量機制的同步和互斥//

//程序資料結構

//鏈式佇列的資料結構

typedef struct process*processptr;

typedef struct link *linkqnode;

void initqnode(linkqnode q)

void insert(linkqnode q,int num)

int select(linkqnode q)

processptr p = (process *)malloc(sizeof(processptr));

p = q->front->next;

q->front->next = q->front->next->next;

int num ;

num = p->num;

if (q->rear == p)

q->rear = q->front;//如果只有乙個元素,那麼隊頭指標等於隊尾指標

free(p);

return num;

}//程序記錄的資料結構

typedef struct semaphore*semaphoreptr;

//訊號量機制的操作

class singal_opt ;

~singal_opt() {};

void setnumber(int n);//設定程序編號

void block(semaphoreptr s);//將等待程序插入到阻塞佇列

void wakeup(semaphoreptr s);//喚醒程序

void wait(semaphoreptr s);//程序申請臨界資源

void singal(semaphoreptr s);//程序使用完畢並釋放臨界資源

};void singal_opt::setnumber(int n)

void singal_opt::block(semaphoreptr s)

void singal_opt::wakeup(semaphoreptr s)

else

}void singal_opt::wait(semaphoreptr s)

else if (s->value >= 0)

}void singal_opt::singal(semaphoreptr s)

}int main()

ps:這段**中我把signal寫成singal了,-_-||

除錯結果:

作業系統 程序同步

臨界資源 critical resouce 臨界區 critical section 硬體同步機制 訊號量機制 訊號量的應用 管程3使用多道批處理系統不僅能有效的改善資源的利用率,還可以顯著地提高系統的吞吐量,但同時會使系統變得更加複雜,會使程式的執行結果存在不確定性。所以必須引入程序同步機制從而保...

作業系統 程序同步

引入程序 提高了資源的利用率和系統的吞吐量 程序的非同步性 會給系統造成混亂 程序同步基本概念 1,兩種形式的制約關係 a 間接相互制約 ab兩程序爭用一台印表機 b 直接相互制約 a程序放資料 緩衝區 b程序從緩衝區取資料 2,臨界資源 硬體臨界資源 軟體臨界資源 印表機,磁帶機,緩衝區。3,臨界...

作業系統 程序同步

ipc.件 include include include include include include include define bufsz 256 建立或獲取 ipc 的一組函式的原型說明 int get ipc id char proc file,key t key char set s...