Boost Spirit V2 Qi语法线程安全吗?

时间:2018-10-06 11:56:59

标签: c++ boost boost-spirit boost-spirit-qi boost-spirit-x3

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

所以我的主要问题是:


1。独特的Spirit V2语法对象线程安全吗?

如果知道的话是可选的:

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

3。独特的Spirit V2规则对象线程安全吗?

4。共享Spirit V2规则对象的线程安全吗?

我也将其标记为Spirit x3,因为那里是同样的问题。

1 个答案:

答案 0 :(得分:2)

实际上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),并且本质上是无状态的。