作業系統 實驗三
阿新 • • 發佈:2020-12-26
1. 實驗目的及要求
分析程序爭用臨界資源的現象,學習解決程序互斥的方法。
2. 實驗內容
Linux****程序控制 lockf()
利用系統呼叫lockf(fd,mode,size),對指定區域(有size指示)進行加鎖或解鎖,以實現程序的同步或互斥。其中,fd是檔案描述字;mode是鎖定方式,mode=1表示加鎖,mode=0表示解鎖;size是指定檔案fd的指定區域,用0表示從當前位置到檔案結尾(注:有些Linux系統是locking(fd,mode,size))
3. 實驗原始碼
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { int pid1, pid2, i; lockf(1,1,0); printf("\n\ni'm father\n"); while ((pid1 = fork()) == -1); if(pid1 == 0) { lockf(1,1,0); printf("\n\ni'm son\n"); for (i = 0; i < 99; i++) printf(" %d", i); lockf(1,0,0); return 1; } while ((pid2 = fork()) == -1); if(pid2 == 0) { lockf(1,1,0); printf("\n\ni'm daughter\n"); for (i = 0; i < 99; i++) printf(" %d", i); lockf(1,0,0); return 2; } printf("\n"); return 0; }
4. 實驗結果
結果分析
首先是在父程序中建立了一個子程序,子程序需要輸出文字資訊,並且在輸出語句執行之前,將標準輸出裝置鎖住,在輸出語句執行之後,將標準輸出裝置解鎖。同樣,父程序也是要輸出文字資訊,對標準輸出的操作同子程序。這樣做能夠防止父程序和子程序競爭標準輸出(螢幕)資源,即如果父程序正在進行螢幕列印操作,則子程序將無法獲得螢幕。