線程同步實驗報告(A39)_第1頁
線程同步實驗報告(A39)_第2頁
線程同步實驗報告(A39)_第3頁
線程同步實驗報告(A39)_第4頁
線程同步實驗報告(A39)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

廣州商學院操作系統(tǒng)實驗報告(第4次)實驗名稱:實驗六線程同步一、實驗目的1.加深理解線程同步的概念及實現(xiàn)線程同步的原理。2.掌握Linux線程庫支持的信號量同步機制和信號量互斥機制,學會通過信號量信號實現(xiàn)線程間的同步與互斥。二、實驗內(nèi)容實驗七、線程同步實現(xiàn)公交車司機與售票員同步,參考實驗四,完成該程序的設計三、原理和實驗主要步驟1、原理:Linux的線程庫中定義了同步信號量以及多種同步信號量操作函數(shù)(原語)。POSIX信號量同步信號量的類型為sem_t基本的同步信號量操作函數(shù)有4個:sem_init()sem_wait()(相當于P操作)sem_post()(相當于V操作)sem_destroy()它們均在頭文件semaphore.h中聲明。sem_init函數(shù)原型:intsem_init(sem_t*sem,inttype,intvalue);其中,參數(shù)sem為同步信號量的指針;type為信號量類型,若為0,表示該信號量是現(xiàn)行進程的局部信號量(只在現(xiàn)行進程的線程之間使用),否則,它可為多個進程所共享;value是信號量值的初值。功能:初始化同步信號量。sem_wait函數(shù)原型:intsem_wait(sem_t*sem);功能:同步信號量的P操作sem_post函數(shù)原型:intsem_post(sem_t*sem);功能:同步信號量的V操作sem_destroy函數(shù)原型:intsem_destroy(sem_t*sem);功能:清理同步信號量上述函數(shù)返回0表示成功,非0表示失敗。2、本實驗要求應用Linux線程庫支持的信號量互斥機制改進實驗4.2,即程序test4_2.c。該互斥機制的內(nèi)容見講義Unit4中的4.2節(jié)。本實驗的程序框架和部分程序代碼如下,請完成該程序的設計,/*test6_1.c*/#include<stdio.h>#include<pthread.h>intticket[10]={1,3,5,7,9,2,4,6,8,10};intrest=10;intth_num[2]={1,2};/*自定義的線程序號*/<定義一個互斥信號量>void*terminal(void*p)/*售票終端線程代碼*/{intmynum=*((int*)p);/*本終端的序號*/inttot=0;/*本終端售票計數(shù)*/<你的設計部分>printf(“Terminal_%dselled%dtickets.\n”,mynum,tot);pthread_exit(0);}intmain(){pthread_ttid[2];<初始化信號量>pthread_create(&tid[0],NULL,terminal,&th_num[0]);/*參數(shù)“&th_num[0]”是線程的入口參數(shù)*/pthread_create(&tid[1],NULL,terminal,&th_num[1]);<等待線程終止><撤消信號量><結(jié)束>}問題描述:公共汽車上,司機和售票員的活動分別是:司機的活動:啟動車輛;正常行車;到站停車。售票員的活動:關(guān)車門;售票;開車門。在汽車不斷的到站、停站、行駛過程中,用信號量和P,V操作實現(xiàn)它們的同步。三、實驗結(jié)果測試(粘貼程序源代碼截圖。)/*test6_1.c*/#include<stdio.h>#include<pthread.h>#include<stdlib.h>intticket[10]={1,3,5,7,9,2,4,6,8,10};intrest=10;intth_num[2]={1,2};/*自定義的線程序號*//*<定義一個互斥信號量>*/pthread_mutex_tp_mutex;void*terminal(void*p)/*售票終端線程代碼*/{ intmynum=*((int*)p);/*本終端的序號*/ inttot=0;/*本終端售票計數(shù)*/ longi; /*<你的設計部分參考test_2.c>*/while(1){pthread_mutex_lock(&p_mutex);//lockif(rest>0){//pthread_mutex_lock(&p_mutex);//lock rest--; tot++; for(i=0;i<999999;i++);printf("終端_%d:賣掉1張票,號碼是:%d\n",mynum,ticket[rest]);// pthread_mutex_unlock(&p_mutex);//unlock}else{pthread_mutex_unlock(&p_mutex);//unlockbreak;}pthread_mutex_unlock(&p_mutex);for(i=0;i<999999;i++);}printf("終端_%d一共買掉%d張票.\n",mynum,tot); pthread_exit(0);}intmain(){ pthread_ttid[2]; pthread_mutex_init(&p_mutex,NULL);//初始化信號量/*參數(shù)"&th_num[0]"是線程的入口參數(shù)*/ pthread_create(&tid[0],NULL,terminal,&th_num[0]); pthread_create(&tid[1],NULL,terminal,&th_num[1]);pthread_join(tid[0],NULL);//等待線程終止pthread_join(tid[1],NULL);//等待線程終止pthread_mutex_destroy(&p_mutex);//撤消信號量printf("\n*************OVER*************\n");return0;//結(jié)束}代碼截圖:四、分析與思考在代碼的編寫過程中,往往少

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論