進程間的通訊---------共享內存

《一》共享內存的實現原理:

共享內存區域是多個進程共享的一部分物理內存,如果多個進程都把該內存區域映射到自己的虛擬內存地址空間,則這些進程就都可以直接訪問這篇共享內存區域,從而可以通過該區域進行進程間的通訊 ,一個進程向共享內存中寫入了數據,共享這個內存區域的所有進程都可以立刻獲取到其中的數據,這塊共享虛擬內存的頁面出現在每一個共享該頁面的進程的頁表中,但是它不需要再所有進程的虛擬內存中都有相同的虛擬地址.

《二》特點:它是進程通訊的最快的方法,因爲它少了兩次拷貝,直接操作同一片內存即可

《三》共享內存的操作:
創建/獲取:int shmget((key_t)key, size_t size, int flag);
映射到本進程的地址空間上:

void* shmat(int shmid, void *addr, int flag);
斷開鏈接:int shmdt(void *ptr);
釋放:int shmctl(int shemid, int cmd, struct shmid_ds *buff);

共享內存

共享內存對於操作的進程而言, 是一個臨界資源, 所以進程在使用共享內存時必須進行進程同步控制。 ----》 信號量

《四》共享內存代碼:(sem.c  sem.h在信號量中有)通過A進程把字符串輸入到共享內存中,B進程計算字符串長度

對共享內存中進行寫操作

共享內存

對共享內存中進行讀操作

共享內存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章