我是新來提升。 我使用「提升管理的共享內存」下面的示例中,但同時分配在以下行中的共享段的內存一個實例被撞壞:如果在Windows上使用managed_shared_memory,則會崩潰
char_string key_object(keyHashStr.c_str(), alloc_inst3);
的崩潰發生時我的樣品只有一個以上的實例應用程序正在同時運行。 如果我使用「提升管理的Windows共享內存」,那麼沒有崩潰。
有人能讓我知道我在做什麼錯嗎?
#include <boost/interprocess/sync/interprocess_mutex.hpp>
#include <boost/interprocess/sync/scoped_lock.hpp>
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/interprocess/containers/flat_map.hpp>
#include <boost/interprocess/containers/set.hpp>
#include <boost/interprocess/containers/string.hpp>
#include <string>
#include <Windows.h>
#include <iostream>
#define AMMSRCUNITLIMIT 0x0100000 /* 1M bytes */
#define RESERVED_BUFFER_SIZE_WRITE (8 * AMMSRCUNITLIMIT)
#define SHM_SIZE_FOR_TRACKING 65536
#define MAX_PATH 260
using namespace boost::interprocess;
//Typedefs of allocators and containers
typedef allocator<void, managed_shared_memory::segment_manager> void_allocator;
typedef allocator<char, managed_shared_memory::segment_manager> char_allocator;
typedef boost::interprocess::basic_string<char, std::char_traits<char>, char_allocator> char_string;
int main(int argc, char *argv[])
{
managed_shared_memory *m_sharedMemUsage = NULL;
string keyHashStr;
try
{
m_sharedMemUsage = new managed_shared_memory(create_only, "MyBookkeeper", 2 * RESERVED_BUFFER_SIZE_WRITE);
keyHashStr = "AAAAAAAAAAAAAAAAAAAAAAA";
}
catch (...)
{
while (true)
{
try{
m_sharedMemUsage = new managed_shared_memory(open_only, "MyBookkeeper");
break;
}
catch (...)
{
std::cout << "Some problem, trying again" << std::endl;
}
}
keyHashStr = "AAAAAAAAAAAAAAAAAAAAAAB";
}
{
char_allocator alloc_inst3 = m_sharedMemUsage->get_segment_manager()->get_allocator<char>();
int count = 0;
while (count < 100000)
{
char_string key_object(keyHashStr.c_str(), alloc_inst3);
++count;
}
}
}
定義'crash'。它是否會拋出異常?這個過程是否會死亡? –
如果拋出異常,可能有其背後的原因,反覆嘗試同樣的事情不會有太大的幫助。 「瘋狂的定義是做同樣的事情,但期待不同的結果」。相反,試着去理解*爲什麼會拋出異常,並且可以採取什麼措施來防止它。 –
@MarkJansen:通過崩潰我的意思是這個過程正在消失 – rban