1. 程式人生 > 實用技巧 >作業系統 實驗三

作業系統 實驗三

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. 實驗結果

結果分析

首先是在父程序中建立了一個子程序,子程序需要輸出文字資訊,並且在輸出語句執行之前,將標準輸出裝置鎖住,在輸出語句執行之後,將標準輸出裝置解鎖。同樣,父程序也是要輸出文字資訊,對標準輸出的操作同子程序。這樣做能夠防止父程序和子程序競爭標準輸出(螢幕)資源,即如果父程序正在進行螢幕列印操作,則子程序將無法獲得螢幕。