如何在Linux中观察变量

How to watch a variable in Linux

本文关键字:观察 变量 Linux      更新时间:2023-10-16

在我的应用程序中,我想实现一个高效的数据记录器,它可以将跟踪打印到文件中。该应用程序在Beaglebone Black上运行,并且存在一些软时间关键点。这就是为什么我不想简单地在旅途中打印跟踪,因为这会减慢应用程序的速度。我想创建一个单独的数据记录器类来完成这项工作。现在我想知道如何将跟踪保存到推送到列表中的字符串变量。然后在一个单独的线程中从列表中提取项目并保存到文件中。

现在,我知道如何做到这一点的方法是每隔几毫秒检查一次单独线程中的列表长度是否大于0,即每100毫秒使用睡眠。问题是,我检查的频率越高,消耗的处理器功率就越多。我知道有一些像观察者这样的Linux机制可以观察文件中的更改。我想知道变量是否存在这样的机制?例如,每当我将一个项目放入列表时,我都会增加一个整数变量,然后保存到文件线程可以随着关注变量的变化而触发。

我甚至不确定这种机制是否是应用程序的最佳方法,这只是我想到的。

有不同的解决方案可以在不同的线程之间进行通信。由于您已经要为列表中的同步支付费用,因此可以添加一个条件变量并使用它来通知其他线程:

// sketch
class SynchedQueue {
   std::deque<std::string> data;
   std::mutex              m;
   std::condition_variable cv;
public:
   void push_back(std::string s) {
       std::unique_lock<std::mutex> l(m);
       data.emplace_back(std::move(s));
       cv.notify();
   }
   std::string pop_front() {
       std::unique_lock<std::mutex> l(m);
       cv.wait(l, [&]() { return !data.empty(); });
       std::string r = std::move(data.front());
       data.pop_front();
       return r;
   }
};