在阅读Boost精神V2文档this SO-question和this 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,因为那里是同样的问题。
答案 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),并且本质上是无状态的。