1

私の問題は次のとおりです。

プログラムが共有メモリ マップに再アタッチできないのはなぜですか?

私は自分のプログラムで次のことを行います (これは私のプログラムのほんの一部ですが、boost ページの例を使用する方が簡単かもしれません):

初めて、初期化します。

m_sharedMemory = new managed_shared_memory(create_only, segmentName.c_str() , 1000000);
m_hashMap = m_sharedMemory->construct<MyHashMap>(segmentName.c_str())( 3, boost::hash<std::string>(), std::equal_to<std::string>() , m_sharedMemory->get_allocator<ValueType>());

2回目の「貼り直し」

m_sharedMemory = new managed_shared_memory(open_only, segmentName.c_str());
m_hashMap = m_sharedMemory->find<MyHashMap>(segmentName.c_str()).first;

ここでの私の問題は、2つのアイテムが挿入された場合、findから返されたオブジェクトの.second呼び出しが実際には間違っている「1」を表示することです.2を表示するはずです。プログラムがクラッシュします。誰かがすでにこれを行っていますか。

最初のプログラムの実行で同じことを行うと、ハッシュから値を検索しても問題ありません。これは、プログラムが初期化され、後でプログラムが再起動され、アタッチが実行され、以前に挿入された値を取得しようとした場合にのみ発生します。

助けてくれてありがとう。

Boost Quick Ref Mapの例

4

1 に答える 1

0

このライブラリの「作成者」と話していると、同じプロセス内でのみマップを使用できるようになるとのことでした。

于 2012-09-05T07:09:37.697 に答える