1. 程式人生 > >同是共享記憶體,shm_open與shmget有什麼差異?

同是共享記憶體,shm_open與shmget有什麼差異?

  因為工作需要,這幾天研究了一下共享記憶體。搞得自己也有點糊塗。糊塗在哪裡?有兩個共享記憶體的東西。仔細研究了之後,初步結論如下。

  shm_open:把共享記憶體以檔案方式開啟,這樣就可以直接向檔案中寫入資料了。有以下注意事項:

  從瞭解的資料來看,硬碟可能有對應的檔案。如果是真的,資料量大的時候,就存在一個性能問題。

  程序甲寫資料,程序乙可能分兩次收到。

  一個程序寫,另外兩個程序是否都能收到?

  如果使用select(),理論上不需要加鎖。

  有人問,用管道是不是能實現同樣功能?如果是一對一,管道可以;如果是多對一,還是這個更好。因為工作情況,沒有更深入的研究。

 

  shmget():就是得到一個記憶體區, KEY相同情況下,各程序訪問的是同一塊記憶體。造型為指定型別後,直接操作訪問。注意:

  訪問程序間要加鎖。這個鎖也必須是共享記憶體鎖。參考吾其他博文。

  寫資料時,結構體中的緩衝區必須是已經宣告足夠大小,而不是一個指標需要時malloc。因為malloc的地址,其他程序訪問不到。