C++ 多线程编程:优化进程监控与资源信息更新

在多线程编程中,监控进程状态并更新资源信息是非常常见的需求。本文将探讨如何优化这一过程,并提供示例代码。

优化思路

之前的代码中,cpu_info_ 的值需要根据进程是否存在进行自增操作。现在我们改为直接根据进程是否存在设置固定的值,可以进一步简化代码。

代码实现

以下是优化后的 clear_cpu_info_() 函数的示例代码:cpp#include #include #include #include

void MONITOR_BASE::clear_cpu_info_(){ static std::mutex cpu_mutex; // 定义静态互斥锁

std::string process_name = 'auto_ad_memory_monitor';    std::string check_process_cmd = 'pidof ' + process_name;

FILE* pipe = popen(check_process_cmd.c_str(), 'r');    char buffer[128];    std::string result = '';    while (fgets(buffer, sizeof(buffer), pipe) != nullptr)    {        result += buffer;    }    pclose(pipe);

bool process_exists = !result.empty();

// 加锁保护对 cpu_info_ 的访问    std::lock_guard<std::mutex> lock(cpu_mutex);

if (process_exists)    {        // 进程存在,设置 cpu_info_ 的值为 1        cpu_info_.auto_ad_memory_monitor.cpu.data = 1;        cpu_info_.auto_ad_memory_monitor.mem.data = 1;        cpu_info_.auto_ad_memory_monitor.vsz.data = 1;    }    else    {        // 进程不存在,将对应的 cpu_info_ 值清零        cpu_info_.auto_ad_memory_monitor.cpu.data = 0;        cpu_info_.auto_ad_memory_monitor.mem.data = 0;        cpu_info_.auto_ad_memory_monitor.vsz.data = 0;    }}

代码解释:

  1. 检查进程是否存在: 使用 pidof 命令检查名为 'auto_ad_memory_monitor' 的进程是否存在。2. 加锁保护: 使用 std::mutexstd::lock_guard 保证对 cpu_info_ 的访问是线程安全的。3. 设置资源信息: 根据进程是否存在,直接设置 cpu_info_ 中对应字段的值为 1 或 0。

总结

通过上述优化,我们简化了代码逻辑,提高了程序效率。在多线程编程中,合理使用互斥锁和优化资源访问方式对于提升程序性能至关重要。

C++ 多线程编程:优化进程监控与资源信息更新

原文地址: https://www.cveoy.top/t/topic/lr2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录