gpt4 book ai didi

c++ - "spamming"boost::property_tree::read_json 访问冲突

转载 作者:行者123 更新时间:2023-11-30 04:15:24 25 4
gpt4 key购买 nike

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

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

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

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

这里调用了 read_json:

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 个线程,服务器正确处理和解析所有内容。

最佳答案

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

你必须定义:

#define BOOST_SPIRIT_THREADSAFE

关于c++ - "spamming"boost::property_tree::read_json 访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18312841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com