Multithreading llvm/clang内部线程安全吗?

Multithreading llvm/clang内部线程安全吗?,multithreading,clang,llvm,Multithreading,Clang,Llvm,我想使用llvm/clang c api解析源文件(.cpp):clang_parseTranslationUnit,然后clang_indexTranslationUnit,clang_getDiagnosticSetFromTU,clang_tokenize尽可能快。所以我想先解析,然后并发地执行其他例程。同时执行一些翻译单元操作安全吗?是否有任何方法可以打开/关闭线程安全 更新:我已尝试同时标记和索引,但出现错误: 断言失败:(已获取&“并发访问ASTUnit!”), 函数启动,文件 /U

我想使用llvm/clang c api解析源文件(.cpp):
clang_parseTranslationUnit
,然后
clang_indexTranslationUnit
clang_getDiagnosticSetFromTU
clang_tokenize
尽可能快。所以我想先解析,然后并发地执行其他例程。同时执行一些翻译单元操作安全吗?是否有任何方法可以打开/关闭线程安全

更新:我已尝试同时标记和索引,但出现错误:

断言失败:(已获取&“并发访问ASTUnit!”), 函数启动,文件 /Users/user/Documents/dev/src/llvm_34/tools/clang/lib/Frontend/ASTUnit.cpp, 第2947行。libclang:在索引过程中检测到崩溃


如何启用线程安全?

如何实现并发?使用GCD队列。解析在第一个块中完成,然后在一个GCD队列组中同时完成标记化、索引和获取诊断。您认为动态分配是线程安全的吗?为什么不?我不确定clang内部的情况,但似乎可以同时执行该操作,因为它们很可能对AST使用只读访问(在解析过程中创建)。不管怎样,我只是想请那些肯定知道的人来回答我的问题,因为他们对叮当声和并行性了解不多。我对程序分析和并行性非常感兴趣;已经有一段时间在构建这样的工具(不是基于叮当声)。他们很难做到正确;数据竞赛是地狱,你只是不想拥有它们。