我有一个指标收集线程,用于检查工作线程以报告指标。 这些工作线程可以随时终止,那么如何确保当我调用工作线程的指标报告函数时,工作线程没有被终止呢?
我尝试使用
unique_ptr
,但这并不妨碍免费后使用。我不希望 MyMetricMonitor
拥有每项任务。
我可以创建共享指针,但我希望
MyTask
能够在任务完成时保持空闲
WeakPtr
这里最好吗?
示例:
#include <folly/Executor.h>
#include <folly/executors/CPUThreadPoolExecutor.h>
class MyTask {
public:
MyTask() : {}
void run() {
}
};
class MyMetricMonitor {
public:
void addTaskToMonitor(std::unique_ptr<MyTask>& task) {
tasks.push_back(task);
}
void monitor() {
for (auto& task : tasks_) {
task->getMetric();
}
}
private:
std::vector<MyTask> tasks;
};
int main() {
MyMetricMonitor monitor;
std::thread monitorThread(monitor);
auto executor = std::make_shared<folly::CPUThreadPoolExecutor>(
2, std::make_shared<folly::NamedThreadFactory>("Worker"));
// Submit a task that is a class instance
folly::via(executor.get(), [] {
std::unique_ptr<MyTask> task = std::make_unique<MyTask>(42);
task.run();
monitor.addTaskToMonitor(task)
});
monitorThread.join();
}
c++中如何保证智能指针的引用有效?
它指的是“某物”,在“你”(作为信息的持有者)记下它之后,它可能会存在,也可能不会存在。
除此之外。你不知道。通过良好的设计,如果无效,您将永远不会取消引用底层指针。语言中没有“确保”。它是在你周围的人帮助你不使用低级语言的力量来破坏事物。