boost spirit V2 Qi 语法线程安全吗?

Are boost spirit V2 Qi grammars thread safe?

在阅读 boost spirit V2 文档时, and this top google spirit doc result for spirit classic/v1 我找不到任何关于 boost spirit V2 语法和规则的线程安全声明。有些人声称它不再像经典的那样,#define BOOST_SPIRIT_THREADSAFE 不会有任何影响,但如果 V2 在线程安全方面与经典没有什么不同,提到来源不是很清楚是否它在谈论不同的实例或共享实例。

所以我的主要问题是:


1. distinct spirit V2语法对象线程安全吗?

如果知道的话可以选择:

2。共享精神 V2 语法对象线程安全吗?

3。 distinct spirit V2 规则对象线程安全吗?

4. shared spirit V2规则对象线程安全吗?

我也将它标记为 spirit x3,因为那里是同一个问题。

确实BOOST_SPIRIT_THREADSAFE不适用于Qi,它适用于Classic。

除此之外,线程安全唯一依赖的是 Boost 是否支持线程。五年来我发现的所有迹象表明,没有库明确支持没有线程支持的构建。 (What exactly does `threading=multi` do when compiling boost?).

非终结符(语法和规则)是线程安全的,除非您派生出自己的非无状态语法并且 parse 操作不是 const。

在实践中,更愿意编写您的解析器,以便它们可以显式地被 const 限定:

Parser const p;

book ok = parse(f, l, p);

X3 更容易证明线程安全,因为规则通常是 const 全局静态(甚至是 constexpr)并且本质上是无状态的。