POSIX共享記憶體 共享計數器

2021-08-15 15:07:04 字數 1760 閱讀 2984

父子程序共享乙個計數器,每次父程序或子程序可以給計數器加一。

#include

#include

#include

#include

using

namespace

std;

struct shared;

shared shared;

int main()

return

0; }

for(int x=0;x<10;x++)

waitpid(pid,null,0);

}

執行結果

結果在我們的意料之中,計數器並沒有實現共享,父子程序各自擁有乙個計數器。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct shared;

const

char* file = "./temp"; //合法的檔案路徑

shared* shared;

int main()

return

0; //否則會執行2個for迴圈

}for(int x=0;x<10;x++)

waitpid(pid,null,0);

close(fd);

}

執行結果

我們先使用open函式開啟乙個共享的檔案,然後用mmap函式將共享檔案對映到父子程序的程序空間上,從而實現共享計數器。從上面的結果中可以看出,父子程序間實現了共享計數器,但是沒有實現計數的功能,因為父子程序之間存在競爭條件,需要一定的同步機制來保證父子程序間的同步。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct shared;

const

char* file = "./temp"; //合法的檔案路徑

shared* shared;

int main()

return

0; //否則會執行2個for迴圈

}for(int x=0;x<10;x++)

waitpid(pid,null,0);

sem_destroy(&shared->mutex);

close(fd);

}

執行結果

我們通過乙個訊號量mutex來實現父子程序之間的互斥,從上面的結果可以看出,成功地實現了計數器的功能。

POSIX共享記憶體

本文參考 嵌入式linux開發教程 和 linux unix系統程式設計手冊 共享記憶體是允許兩個不相關的程序訪問同乙個邏輯記憶體的程序間通訊方法,是在兩個正在執行的程序之間共享和傳遞資料的一種非常有效的方式。不同程序之間的共享記憶體通常安排為同一段物理記憶體。程序可以將同一段共享記憶體連線到它們自...

POSIX共享記憶體

共享記憶體是最快的可用ipc形式。它允許多個不相關 無親緣關係 的程序去訪問同一部分邏輯記憶體。如果需要在兩個程序之間傳輸資料,共享記憶體將是一種效率極高的解決方案。一旦這樣的記憶體區對映到共享它的程序的位址空間,這些程序間資料的傳輸就不再涉及核心。這樣就可以減少系統呼叫時間,提高程式效率。共享記憶...

Posix共享記憶體區

1 概述 posix提供了兩種在無親緣關係程序間共享記憶體區的方法 者兩種方法多需要呼叫mmap,差別在於作為mmap的引數之一的描述符的獲取手段。2 posix共享記憶體區物件 posix共享記憶體區涉及以下兩個步驟要求 1 指定乙個名字引數呼叫shm open,以建立乙個新的共享記憶體區物件或開...