提升精神 V2 Qi 语法线程安全吗?

Are boost spirit V2 Qi grammars thread safe?

本文关键字:线程 安全 语法 Qi V2      更新时间:2023-10-16

在阅读提升精神 V2 文档、这个 SO 问题和这个顶级谷歌精神文档结果时 精神经典/v1 我找不到任何关于提升精神 V2 语法和规则的线程安全性的声明。有些人声称它不再像经典一样,#define BOOST_SPIRIT_THREADSAFE不会有任何影响,但如果 V2 在线程安全方面与经典没有区别,提及来源不是很清楚它是在谈论不同的实例还是共享实例。

所以我的主要问题是:


1. 不同的精神V2语法对象线程安全吗?

如果知道,则可选:

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

3. 不同的精神 V2 规则对象线程安全吗?

4. 共享精神 V2 规则对象线程安全吗?

我也将其标记为精神x3,因为它在那里是相同的问题。

事实上,BOOST_SPIRIT_THREADSAFE无论如何都不适用于 Qi,它适用于经典。

有了这个,线程安全唯一取决于的是 Boost 是否构建了线程支持。五年来我发现的所有迹象都是,没有一个库明确支持没有线程支持的构建。(编译 boost 时,"线程=多"到底是做什么的?

非终端(语法和规则(是线程安全的,除非您派生自己的语法不是无状态的,并且parse操作不是常量。

在实践中,更喜欢编写解析器,以便它们可以显式限定:

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

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