C++ 多线程编程:优化进程监控与资源信息更新
C++ 多线程编程:优化进程监控与资源信息更新
在多线程编程中,监控进程状态并更新资源信息是非常常见的需求。本文将探讨如何优化这一过程,并提供示例代码。
优化思路
之前的代码中,cpu_info_ 的值需要根据进程是否存在进行自增操作。现在我们改为直接根据进程是否存在设置固定的值,可以进一步简化代码。
代码实现
以下是优化后的 clear_cpu_info_() 函数的示例代码:cpp#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; }}
代码解释:
- 检查进程是否存在: 使用
pidof命令检查名为 'auto_ad_memory_monitor' 的进程是否存在。2. 加锁保护: 使用std::mutex和std::lock_guard保证对cpu_info_的访问是线程安全的。3. 设置资源信息: 根据进程是否存在,直接设置cpu_info_中对应字段的值为 1 或 0。
总结
通过上述优化,我们简化了代码逻辑,提高了程序效率。在多线程编程中,合理使用互斥锁和优化资源访问方式对于提升程序性能至关重要。
原文地址: https://www.cveoy.top/t/topic/lr2 著作权归作者所有。请勿转载和采集!