簡體   English   中英

c將哈希表放入共享內存段

[英]c putting a hash table into a shared memory segment

希望我的問題有意義:用C編程,我可以在共享內存段中創建一個哈希表,所以任何具有適當權限的進程都可以訪問其中的鍵/值嗎? 如果是這樣,我如何在哈希表創建中指定我希望它放在SHM中? 是否有任何推薦的哈希表實現允許這個? 非常感謝

在我的頭頂,我不知道任何庫這樣做。

我知道如果您自己編寫或修改現有庫,那么您需要做的棘手的事情是跟蹤並修復使用指針的任何代碼,並將其替換為使用base + offset的代碼。

基數將是共享內存創建/打開函數返回的指針,並且在每個進程中它將是不同的 偏移量取代了指針。 當您需要通過偏移量定位值時,將基數轉換為char* ,將偏移量添加到該值,然后將其轉換為your_type* (bucket_t*)((char*)base + offset)

這假設您的哈希實現需要指針。 如果他們只使用單值存儲桶而沒有值列表,則有些人不會。

另一個棘手的問題是你需要自己管理內存。 您可以創建自己的函數,而不是調用malloc(),也可以將其命名為shm_hash_alloc()。 一個快速的開始是只保留一個指針並在分配內存時遞增它,並且不用擔心釋放它。 稍后您可以使用指針數組(偏移量)來釋放兩種尺寸的各種冪的列表,或者如果您知道對象類型,則可以使用每種類型的列表。 在每個空閑塊中,您將指針存儲到下一個空閑塊,並且您知道其大小,因為它所在的列表。 甚至有更好的方法,但你可能不需要它們。

我上傳了一個用於Linux的共享內存哈希表庫到SF(libshmht),我開發了它的性能作為主要功能和讀/寫訪問homegeneous訪問時間。 我認為它作為緩存和IPC系統是有用的。 還實現了用於在多個進程之間共享的讀/寫鎖。

http://sourceforge.net/projects/libshmht/

哈希表只是一個數據結構。 只要訪問共享內存的模塊知道如何構建結構,他們就可以訪問它。 只要所涉及的所有模塊都知道如何閱讀它,那么使用哪種實現並不重要。

把它想象成一份報紙。 你創建了自己的私人記憶片段 - 這是鎮上的本地報紙。 然后你想與周圍的所有城鎮分享它 - 你可以,只要人們說同一種語言並且可以閱讀它。 沒有特殊的分享語言,只需要每個人都能理解。

在您的情況下相同 - 您可以使用任何哈希表實現,只要所有線程使用相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM