操作系统课设--使用信号量解决生产者/消费者同步问题
山東大學操作系統(tǒng)課設(shè)lab3
- 實驗三 使用信號量解決生產(chǎn)者/消費者同步問題(lab3)
- 實驗?zāi)康?/li>
- 理解Nachos的信號量是如何實現(xiàn)的
- 生產(chǎn)者/消費者問題是如何用信號量實現(xiàn)的
- 在Nachos中是如何創(chuàng)建并發(fā)線程的
- 在Nachos下是如何測試和debug的
實驗三 使用信號量解決生產(chǎn)者/消費者同步問題(lab3)
實驗?zāi)康?/h2>
使用操作系統(tǒng)信號量機制,編寫程序解決生產(chǎn)者/消費者同步問題。
理解Nachos的信號量是如何實現(xiàn)的
信號量問題主要是對信號量的的占用。分為兩個角色來考慮信號量,一個是生產(chǎn)者,一個是消費者。
生產(chǎn)者/消費者問題是如何用信號量實現(xiàn)的
生產(chǎn)者負責生產(chǎn)message;等待buffer中是否有空位;獲取互斥鎖;將一條message放入buffer中;釋放互斥鎖; buffer中message++。
消費者等待通知有Message;獲取互斥鎖;取出一條message;釋放互斥鎖;buffer中message–。
在Nachos中是如何創(chuàng)建并發(fā)線程的
常規(guī)操作:
#include <fcntl.h>//訪問權(quán)限、創(chuàng)建文件模式、非阻塞標記
#include <stdlib.h>//定義了五種類型、一些宏和通用工具函數(shù)。
#include <unistd.h>//提供對 POSIX 操作系統(tǒng) API 的訪問功能的頭文件的名稱
主要程序在prodcons.cc中
定義3個信號量;2個資源信號量,nempty,full;1個互斥信號量,mutex。
獲取互斥鎖,放入message,釋放互斥鎖。
獲取互斥鎖,取出message,釋放互斥鎖。
在構(gòu)造函數(shù)Prodscon中初始化信號量和生產(chǎn)者、消費者數(shù)組
在Nachos下是如何測試和debug的
./nachos相當于執(zhí)行.exe;進入桌面 cd ~/Desktop/
實驗結(jié)果沒有打印出來,而是生成了兩個文件tmp_0.tmp_1。兩個文件分別對應(yīng)兩個消費者讀到的信息,信息中會記錄生產(chǎn)者的名稱。tmp_0、tmp_1如下:
但是這樣只是tmp_0里有生產(chǎn)者的記錄而已,tmp_1里沒有。我詢問了同學,他告訴我要加random seed,于是我去搜了一下隨機種子的含義及用法。-rs參數(shù)讓nachos的線程隨機yield,讓出cpu。我修改了命令:./nachos -rs 100,結(jié)果tmp_0,tmp_1如下:
我再次修改了命令:./nachos -rs 12553,結(jié)果tmp_0,tmp_1如下:
但是感覺對-rs的作用還是不是特別懂。
總結(jié)
以上是生活随笔為你收集整理的操作系统课设--使用信号量解决生产者/消费者同步问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统课设--具有优先级的线程调度
- 下一篇: 操作系统课设--扩展文件系统