3 共享記憶體

2021-10-22 08:38:28 字數 1449 閱讀 6352

共享記憶體(shared memory),指兩個或多個程序共享乙個給定的儲存區。

1.共享記憶體是最快的一種 ipc,因為程序是直接對記憶體進行訪問。

2.因為多個程序可以同時操作,所以需要進行同步。

3.訊號量+共享記憶體通常結合在一起使用,訊號量用來同步對共享記憶體的訪問。

#include

// 建立或獲取乙個共享記憶體:成功返回共享記憶體id,失敗返回-1

intshmget

(key_t key, size_t size,

int flag)

;void

*shmat

(int shm_id,

const

void

*addr,

int flag)

;// 斷開與共享記憶體的連線:成功返回0,失敗返回-1

intshmdt

(void

*addr)

;int

shmctl

(int shm_id,

int cmd,

struct shmid_ds *buf)

;

步驟:

a.建立共享記憶體/開啟

b.對映

c.資料

d.釋放共享記憶體

shmw.c

#include

#include

#include

#include

#include

#include

intmain()

shmaddr =

shmat

(shmid,0,

0);printf

("shmat ok\n");

strcpy

(shmaddr,

"qwerasdf");

sleep(5

);//等待資料讀完再釋放

shmdt

(shmaddr)

;shmctl

(shmid,ipc_rmid,0)

;return0;

}

shmr.c

#include

#include

#include

#include

#include

intmain()

shmaddr =

shmat

(shmid,0,

0);printf

("shmat ok\n");

printf

("%s\n"

,shmaddr)

;shmdt

(shmaddr)

;shmctl

(shmid,ipc_rmid,0)

;return0;

}

可以通過ipcs -m 檢視共享記憶體

Linux共享記憶體及共享記憶體API

共享記憶體區是最快的ipc 程序間通訊 形式。用共享記憶體從伺服器拷貝檔案資料到客戶端 共享記憶體基本api include include 1.int shmget key t key,size t size,int shm 功能 用來建立共享記憶體 key 是這個共享記憶體段的名字 size 共...

mysql共享記憶體 MySQL全域性共享記憶體介紹

前言 全域性共享記憶體則主要是 mysql instance mysqld程序 以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取二進位制日誌的 binl...

mysql共享記憶體 MySQL全域性共享記憶體介紹

前言 全域性共享記憶體則主要是 mysql instance mysqld程序 以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取二進位制日誌的 binl...