第十八章:併發程式的基本實現( 多程式 )

穆晨發表於2017-01-28

前言

       Linux 是多道處理系統,當然能夠在同一段時間內處理多個程式。

       本文將介紹具體該如何操作。

fork 函式

       此函式的作用是建立一個子程式,呼叫後,呼叫程式和建立的新程式就會併發執行( 從呼叫處開始 )。它呼叫一次,卻返回兩次,一次是在呼叫程式內,返回子程式ID,另一次是在建立的新程式( 子程式 )內,返回 0。

       函式的具體說明請參閱相關文件。

併發程式碼框架

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 
 4 int main (void) {
 5 
 6     int pid;
 7 
 8     if ((pid = fork()) == 0) {
 9 
10         /* 
11          * 此處填寫子程式程式碼 
12         */ 
13 
14     }
15     else if (pid < 0) {
16 
17         /* 
18          * 此處填寫錯誤處理程式碼 
19         */ 
20 
21     }
22     else {
23 
24         /* 
25          * 此處填寫父程式程式碼 
26         */ 
27 
28     }
29     
30     return 0;
31 }

程式碼實現

  此程式將讓兩個程式交替的每隔 1 秒列印它們的各自程式 ID:

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 
 4 int main (void) {
 5 
 6     int pid;
 7 
 8     if ((pid = fork()) == 0) {
 9         while (1) {
10             sleep(1);
11             printf("I am %d \n", getpid());
12         }
13     }
14     else if (pid < 0) {
15         printf("建立子程式失敗\n");
16         return 1;
17 
18     }
19     else {
20         while (1) {
21             sleep(1);
22             printf("I am %d \n", getpid());
23         }
24     }
25     
26     return 0;
27 }

執行測試

       

小結

       1. 本文講述的是最簡單最基本的併發實現,很多更復雜的併發實現都是基於這個框架的。

       2. 如果要確保子程式先執行,並且在啟動子程式後立馬 exec 一個新程式的話,請將 fork 換成 vfork。

相關文章