当read_json在多个线程中使用时,我们可以始终使用BOOST_SPIRIT_THREADSAFE标志而不与 boo

Can we use BOOST_SPIRIT_THREADSAFE flag always when read_json is used in multiple threads without linking with boost.thread libraries?

本文关键字:BOOST SPIRIT 标志 boo THREADSAFE json read 线程 我们      更新时间:2023-10-16

我们在项目中使用了boost。我们没有链接任何提升库,但我们包括像boost/property_tree/ptree.hpp这样的提升头文件。

我们从多个线程(不是 boost 线程而是 posix 线程)调用read_json,并且在 read_json() 函数中遇到崩溃。现在我们在包含头文件之前包含了BOOST_SPIRIT_THREADSAFE因为 boost json 解析器不是线程安全的,一切都工作正常。但是我们的审稿人不接受此更改,他指向以下链接

http://www.boost.org/doc/libs/1_60_0/libs/spirit/classic/doc/grammar.html

正如本页提到的"另一方面,如果语法旨在用于多线程代码,然后我们应该定义BOOST_SPIRIT_THREADSAFE在包含任何精神头文件之前。在此如果还需要链接到Boost.Threads"

但是我们真的需要与 Boost.Threads 库链接,因为我们没有使用提升线程,我的理解是内部提升线程将在 Linux 平台上使用 posix 线程。如果我错了,任何人都可以告诉我。

审阅者正在链接到"1.60.0"文档...的经典精神。

精神经典已经过时了十年或更长时间。

更重要的是,Boost Property Tree重写了它的解析器:它在1.60.0中根本不使用Spirit。某些版本就是这种情况。

请注意,在main入口点之外使用属性树时可能会出现问题,例如:

  • 提升::p roperty_tree::info_parser 在值中中断空格