C 共享記憶體技巧

2021-10-25 18:41:54 字數 2270 閱讀 1128

自己備忘使用

//在共享記憶體中一定要做好揮斥訊號量的使用,防止多個程序同時進行修改記憶體,可以吧共享記憶體作為臨界資源處理

using system;

using system.collections.generic;

using system.linq;

using system.runtime.compilerservices;

using system.runtime.interopservices;

using system.text;

using system.threading;

namespace commonlib

}public

long sharedmemorysize

}public

enum initresult

#endregion

#region ctor

public

sharedmemory

(string moryname)

else}}

///

/// 根據名稱建立乙個互斥資源

///

/// 互斥資源名稱

///

private

mutex

createmutexoropen

(string moryname)

catch

if(tex is

null

)return tex;

}//析構函式在釋放資源時候 呼叫

~sharedmemory()

#endregion

public

initresult

init

(long memorysize)if(

string

.isnullorempty

(sharedmemoryname))if

(memorysize <=

0|| memorysize > memory_maxsize)

m_memsize = memorysize;

//1. 建立記憶體共享體,存進字段

m_hsharedmemoryfile =

(invalib_handle_value, intptr.zero,

(uint

)page_read_write,0,

(uint

)memorysize, sharedmemoryname)

;//2. 判斷建立記憶體共享體是否成功

if(m_hsharedmemoryfile == intptr.zero)

else

}//3. 建立記憶體對映

m_pwdata =

mapviewoffile

(m_hsharedmemoryfile, file_map_write,0,

0,(uint

)memorysize)

;//4. 判斷記憶體對映是否成功

if(m_pwdata == intptr.zero)

else

}catch

(exception ex)

finally

}public

void

close()

mutex.

releasemutex()

; mutex.

close()

;}public

bool

read

(ref

byte

bytedata,

int lngaddr,

int lngsize)

if(m_blint)

else

return

true;}

///

/// 寫入共享記憶體

///

/// 待寫入的資料

/// 待寫入陣列的位置

/// 待寫入資料長度

/// 偏移位置

///

public

bool

write

(byte

bytedata,

int lngaddr,

int lngsize,

int offset)

if(m_blint)

else

return

true;}

public

bool

clear()

}}

C 共享記憶體

共享記憶體作為程序通訊的一種方式,通過記憶體對映檔案,然後允許不同的程序訪問同一塊記憶體實現程序間通訊。示例主要分為讀和寫兩個不同的程序。share write.cpp include include using namespace std intmain share read.cpp includ...

c 實現記憶體對映檔案共享記憶體

記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作檔案,就像操作程序空間裡的位址一樣了,比如使用c語言的 memcpy等記憶體操作的函式。這種方法能夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理io效率比普通io效率要高 00001.using s...

共享記憶體操作類 c

共享記憶體操作類 using system using system.collections.generic using system.text using system.runtime.interopservices namespace sharememlib sharemem 初始化共享記憶體 ...