取消libclang任务
Cancel libclang task
这是一个简短的问题。我相信没有办法取消通过python绑定提交给libclang的作业(例如代码完成任务)。
谁能证明我错了?我对在多线程环境中使用libclang很感兴趣,但它似乎只是打算从单线程访问。如果也没有取消任务的机制,那么即使不再需要结果,也必须等待任务完成。有谁有办法解决这个问题吗?[. .似乎它的目的是访问从单线程。
我没有任何东西明确支持这一点,但由于文档中甚至没有讨论关于线程安全,我认为所有的libclang都应该被认为是而不是线程安全的。
但是:看到基本上libclang所做的一切都(间接地)绑定到一个CXIndex
,我猜测你可以每个线程有一个CXIndex
,然后并行地使用它们(或从它们创建的任何东西)(但不要在线程之间"共享"任何东西)。
如果也没有取消任务的机制,那么即使不再需要结果,也必须等待任务完成。有谁有办法解决这个问题吗?
"安全"的解决方案是将所有libclang相关的代码移到一个专用的进程中。然后从主应用程序启动(或终止)这些进程(使用与操作系统相关的机制)。当然,就性能(启动进程)和开发工作(序列化进程之间的通信)而言,这是"繁重的"。
另一种选择是希望(或在源代码中验证)libclang开发人员保留与CXIndex
相关的所有数据,从而不会在其代码中引入可能的数据竞争。然后你可以给每个线程自己的索引,自己的翻译单位等等。当您有一个"作业"时,您启动一个线程(或重用一个线程)来处理它。如果在此期间不再需要结果,那么您只需在(如果)它们准备好时丢弃结果。
相关文章:
- 有没有任务栏API可以立即应用注册表更改
- 如何创建线程序列以按照启动顺序执行任务?
- C++一个线程如何正确通信其任务已完成?
- 在线程之间拆分任务总是值得的吗?
- 递归求和任务的错误答案
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- C++ 任务流库入门
- 是否可以使用 libclang python 解析 cpp 文件中没有标头的函数原型
- Pisarze - 来自波兰奥林匹克信息学的数据分析任务
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 编写一个读取五个整数并执行一些任务的C++程序
- 任务内部的 OpenMP 任务循环
- 使用 libclang 6.0.1:找不到 stddef.h
- 不知道如何在家庭作业任务中实现一件事
- 如何安全地停止 IOCP WSARecv() 任务,并释放 WSAOVERLAPED 结构?
- 为什么我的 FreeRTOS 任务看不到类成员?
- 当前步骤:构建任务.json 文件
- 命令模式 - 使用"weight"执行任务的命令
- LibClang clang_getArgType() 返回错误的类型
- 取消libclang任务