首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“垃圾邮件”boost::property_tree::read_json时的访问冲突

“垃圾邮件”boost::property_tree::read_json时的访问冲突
EN

Stack Overflow用户
提问于 2013-08-19 11:38:03
回答 1查看 1.1K关注 0票数 2

我使用Boost Asio (1.53.0)制作了一个简单的TCP。服务器接受JSON请求,使用boost::property_tree::read_json.解析它们

为了测试可靠性,我创建了一个简单的应用程序,它创建了128个线程,它们不断地发送请求。

几秒钟后,服务器因访问冲突而崩溃:

代码语言:javascript
复制
Unhandled exception at 0x000007FEFD829E5D (KernelBase.dll) in RPC_Server.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.

msvcr110d.dll!__RethrowException(EHExceptionRecord * pThisException) Line 1217
msvcr110d.dll!__CxxCallCatchBlock(_EXCEPTION_RECORD * pExcept) Line 1279
ntdll.dll!0000000077360c21()
RPC_Server.exe!json::json::Parse(std::basic_string<char,std::char_traits<char>,std::allocator<char> > & sJson) Line 28

下面是get的read_json:

代码语言:javascript
复制
rpc::request json::Parse(std::string sJson)
{
  try {
    std::stringstream ss;
    ss << sJson;
    boost::property_tree::ptree pt;
    boost::property_tree::read_json(ss, pt);
...
}
  • 如果我将read_json行注释掉,服务器将正确处理所有内容。
  • 如果我将简化为仅1个线程,服务器将正确地处理和解析所有内容。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-21 05:02:15

在默认情况下,boost::property_tree::read_json似乎不是线程安全的。

你必须定义:

代码语言:javascript
复制
#define BOOST_SPIRIT_THREADSAFE
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18312841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档