一、實驗名稱:實驗三 程序與執行緒
二、實驗日期:2014/3/13
三、實驗目的:
1. linux程序
2. 簡單的程序同步
四、實驗的步驟和方法:
實驗1 linux程序家族樹
檔名3-1-1.c:看程式寫結果。
要求:
增加1個fork()、2個fork()、多個fork()的結果會怎樣?並說明原因,找出規律。
增加1個fork()
3-1-1-1.c
增加2個fork()
3-1-1-2.c
增加n個fork()結果會有2n個程序。
在fork()語句後新增如下2條語句,結果將如何?
printf(「get the child pid: %d\n」,getpid());
printf(「get the parent pid: %d\n」,getppid());
3-1-2.c
init程序
init程序是系統所有程序的起點,核心在完成核心引導以後,即在本執行緒(程序)空間內載入init程式,它的程序號是1。init程序是所有程序的發起者和控制者。因為在任何基於unix的系統(比如 linux)中,它都是第乙個執行的程序,所以init程序的編號(process id,pid)永遠是1。如果init出現了問題,系統的其餘部分也就隨之不可用。
init程序有兩個作用:
① 扮演終結父程序的角色。因為init程序永遠不會被終止,所以系統總是可以確信它的存在,並在必要的時候以它為參照。如果某個程序在它衍生出來的全部子程序結束之前被終止,就會出現必須以init為參照的情況。此時那些失去了父程序的子程序都會以init作為它們的父程序。
快速執行一下「ps –af」或者top或者gnome-system-monitor命令,可以列出當前執行的程序來。
② 在進入某個特定的執行級別(runlevel)時執行相應的程式,以此對各種執行級別進行管理。
實驗2 父子程序同步實驗
檔名3-2.c:實現子程序先輸出」child proc」,父程序後輸出」 parent proc」。
要求:
請總結實現簡單的父子程序同步的一般方法。
3-2.c
linux中父子程序同步相關系統呼叫
1)程序終止
void exit(stat)
主要任務:自我終止,將程序狀態變為」僵死」狀態,等待父程序用wait系統呼叫來收集。一般引數可設為0,即exit(0)。
exit()
在執行該函式時,程序會檢查檔案開啟情況,清理i/o快取,如果快取中有資料,它們就會寫入相應的檔案,這樣就防止了檔案資料的丟失!然後終止程序。
_exit()
在執行該函式時,並不清理標準輸入輸出快取,而是直接清除記憶體空間,當然也就把檔案快取中尚未寫入檔案的資料給銷毀了。由此可見,使用exit()函式更加安全。
父程序等待子程序終止
pid_t wait([int*stat_addr]0)
一般引數可設為0,即wait(0)
實驗3 子程序映像的重新裝入
建立一程序child.c,功能是輸出」i am a child.」,再建立乙個父程序3-3.c載入該子程序 。
要求:
理解子程序映像的重新裝入。
linux中子程序映像的重新裝入
linux提供了一組系統呼叫exec函式,主要功能是將指定的可執行檔案載入到指定的程序映像中,覆蓋該程序映像中原有的程式。
此類系統呼叫有execl()、execle()、execlp()、execv()、execve()、execvp()
本課只介紹execl()和execv()
execl(「路徑名/檔名」,0)
execv(file, argv)
引數定義:
char *file 指向檔案全名(路徑名/檔名)的指標;
char *argv[n]指向命令及引數的指標。
載入成功則直接執行,不返回;不成功返回-1
child.c
建立乙個child.c原始檔並編譯成child執行檔案
3-3.c
實驗4 子程序映像的重新裝入
建立一程序child1.c,再建立乙個父程序3-4.c載入該子程序。
要求:
1. 理解子程序映像的重新裝入。
2. 掌握exec類函式的用法及功能。
3-4.c:改寫子程序的功能為呼叫鍵盤命令ls –l,已知該鍵盤命令的路徑與檔名為:/bin/ls
在子程序分支中,用execl載入自己的程式後,新增一條語句如printf(「ok!\n」);結果將如何?
child1.c
3-4.c
五、實驗結果或結論:
Linux之路 程序與執行緒(實驗)
實驗1.建立倆個程序,讓子程序讀取乙個檔案,父程序等待子程序讀完檔案後繼續執行 include include include include int main else printf 開啟檔案成敗 exit 3 else return 0 實驗2,執行緒共享程序中的資料,在程序中直接引用並輸出該資...
執行緒與程序 執行緒三把鎖
學習三把鎖時候我們需要先知道為什麼要有三把鎖 全域性資源 counter 被搶占的情況,問題產生的原因就是沒有控制多個執行緒對同一資源的訪問,對資料造成破壞,使得執行緒執行的結果不可預期。這種現象稱為 執行緒不安全 在開發過程中我們必須要避免這種情況,那怎麼避免?這就用到了我們在綜述中提到的互斥鎖了...
C 關於程序與執行緒 三
一 建立多執行緒應用程式 執行緒,也被稱為輕量程序,指執行中程式的排程單位。目前大部分平台都支援多執行緒,允許程式中存在多個執行緒。在windows作業系統的任務管理器中就可以檢視執行緒,把選擇列對話方塊的執行緒計數選上即能顯示每個程序的執行緒數。在本節的例項中,建立了乙個最簡單的多執行緒應用程式。...