




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、word實驗四-同步與互斥-Linux實驗報告.word實驗四 同步與互斥 【實驗目的和要求】1、掌握進程線程的同步與互斥。2、掌握生產者消費者問題的實現方法。3、掌握多線程編程方法?!緦嶒瀮热荨繉崿F生產者消費者問題1、有一個倉庫,生產者負責生產產品,并放入倉庫,消費者會從倉庫中拿走產品(消費)。2、倉庫中每次只能入一個(生產者或消費者)。3、倉庫中可存放產品的數量最多10個,當倉庫放滿時,生產者不能再放入產品。4、當倉庫空時,消費者不能從中取出產品。5、生產、消費速度不同?!緦嶒炘怼?、 信號量mutex提供對緩沖池訪問的互斥要求并初始化為1,信號量empty和full分別用來表示空緩沖項
2、和滿緩沖項的個數,信號量empty初始化為n,信號量full初始化為0。2、定義如下結構及數據: 定義緩沖區內的數據類型:typedef int buffer_item; 緩沖區 :buffer_item bufferBUFFER_SIZE;對緩沖區操作的變量:int in,out; 信號量mutex提供了對緩沖池訪問的互斥要求:pthread_mutex_t mutex; 信號量empty和full分別表示空緩沖頂和滿緩沖頂的個數:sem_t empty,full;
3、60;可以設定生產者的生產速度及消費者的消費速度 :int pro_speed,con_speed;對緩沖區操作的自增函數:#define inc(k) if(k < BUFFER_SIZE) k = k+1;else k=03、并定義了如下實現問題的函數模塊: 將生產的產品放入緩沖區: int insert_item(buffer_item item) 從緩沖區內移走一個產品:&
4、#160;int remove_item(buffer_item *item) 生產者進程 :void *producer(void *param) 消費者進程:void *consumer(void *param) 生產者結構進程 消費者結構進程【程序代碼】/sx.c#include<stdio.h>#i
5、nclude<stdlib.h>#include<pthread.h>#include<semaphore.h>#include<time.h>#define inc(k) if(k<BUFFER_SIZE) k=k+1;else k=0#define BUFFER_SIZE 10/緩沖區的大小typedef int buffer_item;/定義緩沖區內的數據類型buffer_item bufferBUFFER_SIZE;/緩沖區int in,out;/對緩沖區操作的變量pthread_mutex_t mutex;/信號量mutex提供了
6、對緩沖池訪問的互斥要求sem_t empty,full;/信號量empty和full分別表示空緩沖頂和滿緩沖頂的個數int pro_speed,con_speed;/可以設定生產者的生產速度及消費者的消費速度int insert_item(buffer_item item)/將生產的產品放入緩沖區bufferin=item;printf("*insert緩沖池第%d號*n",in);inc(in);int remove_item(buffer_item *item)/從緩沖區內移走一個產品*item = bufferout;printf("*remove緩沖池第%
7、d號*n",out);inc(out);void *producer(void *param)/生產者進程buffer_item item;int num = 0;while(1)sleep(rand()%(16-pro_speed);printf("n*第%d次生產*n",+num);printf("*等待empty信號*n");sem_wait(&empty);printf("*等待解鎖*n");pthread_mutex_lock(&mutex);printf("*上鎖,準備生產*n"
8、;);item = rand()%1000+1; printf("*生產產品%d*n",item);insert_item(item);printf("*解鎖*n");printf("*第%d次生產結束*nn",num);pthread_mutex_unlock(&mutex);sem_post(&full);void *consumer(void *param)/消費者進程buffer_item item;int num = 0;while(1)sleep(rand()%(16-con_speed);printf(&
9、quot;n*第%d次消費*n",+num);printf("*等待full信號*n");sem_wait(&full);printf("*等待解鎖*n");pthread_mutex_lock(&mutex);printf("*上鎖,準備消費*n");remove_item(&item);pthread_mutex_unlock(&mutex);sem_post(&empty);printf("*消費產品%d*n",item);printf("*解鎖*n
10、");printf("*第%d次消費結束*nn",num); int main()/主函數pthread_t tid1,tid2;pthread_attr_t attr1,attr2;srand(time(NULL);pthread_mutex_init(&mutex,NULL);/初始化sem_init(&empty,0,BUFFER_SIZE);sem_init(&full,0,0);in=0;out=0;printf("*n");printf("*開始!*n");printf("*n&
11、quot;);printf("生產者速度(1-15):n");scanf("%d",&pro_speed);printf("消費者速度(1-15):n");scanf("%d",&con_speed);pthread_attr_init(&attr1);pthread_create(&tid1,&attr1,producer,NULL);pthread_attr_init(&attr2);pthread_create(&tid2,&attr2,cons
12、umer,NULL);sleep(100);printf("*程序over*n");return 0;【實驗步驟】編寫程序代碼gedit sx.c,再對代碼進行編譯gcc sx.c o sx lpthread,編譯無錯誤,進行運行./sx,根據提示要求進行填寫生產者和消費速度,觀察消費者和生產者進程?!緦嶒灲Y果】【實驗體會】1、Linux中生成線程方法: 第一種方式是用pthread 庫來實現的,是在用戶程序本身中實現線程,這實際上是對線程的一種模擬,線程之間的切換和調度是在用戶的進程內部進行的,這種方式就被稱為用戶空間的線程。這種線程的好處是實現非常簡單,性能也非常好,因
13、為線程之間的切換都在用戶進程內部進行,切換開銷比擬小。缺點也非常明顯,首先就是不能充分利用高端系統的SMP多處理器的優點,因為一個進程只能由一個處理器處理,第二點由于用戶空間是在用戶空間切換,某個線程遇到一個需要阻塞的系統調用進而就會造成這個進程被阻塞,因而所有線程被阻塞。 第二種方式是通過修改良程的實現方式來完成,可以使用不完全的進程創立方式創立共享數據空間的進程,在Linux下這種系統調用為clone()。2、Ptrtead生成線程: POSIX thread簡稱為pthread,Posix線程是POSIX標準線程該標準定義內部API創立和操縱線程。 數據類型 pthread_t:線程句柄 pthread_attr_t:線程屬性 線程操縱函數(省略參數):pthread_create():創立一個線程 pthread_exit():終止當前線程 pthread_cancel():中斷另外一個線程的運行 pthr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司新春福利活動方案
- 公司活動室建立策劃方案
- 公司日常游戲活動方案
- 公司羽毛球運動活動方案
- 公司游藝類拓展活動方案
- 公司整頓活動方案
- 公司聚餐溫馨活動方案
- 公司登高節活動方案
- 公司晚會活動策劃方案
- 公司環境日活動方案
- 湖南省婁底市漣源市2023-2024學年六年級下學期6月期末英語試題
- 上海市徐匯區市級名校2025屆物理高一第二學期期末考試模擬試題含解析
- 天一大聯盟2024屆高一數學第二學期期末統考試題含解析
- (高清版)JTG 3370.1-2018 公路隧道設計規范 第一冊 土建工程
- 【語文】西安外國語大學附屬小學(雁塔區)小學五年級下冊期末試卷(含答案)
- 新編旅游職業道德 課件 譚為躍 第3-5章 旅行社從業人員道德素養、酒店從業者道德素養、景區點從業人員道德素養
- 小學數學“組題”設計分析 論文
- 附件16:地下室燈帶臨時照明系統方案
- 中央空調維護保養服務投標方案(技術標)
- 服務認證培訓課件
- 風電場反事故措施
評論
0/150
提交評論