我們首先介紹一下,什麼是臨界資源。臨界資源是一種比較稀缺的資源,它可以被多個進程使用,但是同某個時間段內只能被一個進程使用。因此,我們也稱臨界資源為共享資源。比如打印機就是一種臨界資源。它可以被多個進程使用,但是在某段時間內只能有一個進程在使用打印機,不然,打印出的內容就亂了。
為什麼要介紹臨界資源呢?臨界資源和進程之間的通信有什麼關系呢?
大家還記得我們在前面章回中說過的內容嗎?關於進程之間的通信,有三個問題需要解決:(參見第八十三回)
1.進程之間如何通信; 2.進程之間如何使用臨界資源; 3.進程之間如何有序地執行某項任務;我們在前面的章回中介紹了信號和管道,並且詳細介紹了如何使用信號和管道在進程之間發送消息和數據。其實這就是使用信號和管道進行進程間的通信。我們在前面章回中介紹這些內容就是為了解決進程之間通信的第一個問題:進程之間如何通信。
現在呢,這個問題已經解決,我們需要解決進程之間通信的第二個問題:進程之間如何使用臨界資源。這就是我給大家介紹臨界資源的原因。
舉個例子, 我們在vim中編輯test.c文件,並且在該文件中編寫一個簡單的程序,具體的內容如下:
int main()
{
printf("hello \n");
return 0;
}
如果我們在同一個時間內使用gedit也打開test.c文件,並且寫入以下內容:
int main()
{
int a;
printf("please input a value for a. \n");
scanf("%d",&a);
return 0;
}
我們把test.c文件當作一種臨界資源,那麼同時使用vim和gedit編輯test.c文件,vim和gedit會啟動相關的進程。因此,我們可以看作是兩個進程在使用臨界資源。那麼這兩個進程同時使用該臨界資源,文件中究竟是什麼內容呢?
實際上vim和gedit這兩個進程會使用專門的方法來訪問該臨界資源,這樣就能保證了臨界資源內的內容在兩個進程中是一致的。那麼它們使用什麼方法訪問臨界資源呢?我們在接下來的章回中會介紹訪問臨界資源的兩種方法:共享內存和消息隊列。
各位看官,關於進程間通信之臨界資源的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。